You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					39 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					39 lines
				
				1.2 KiB
			| 
											3 years ago
										 | var isBoolean = require('./isBoolean.js'); | ||
|  | var _cb = require('./_cb.js'); | ||
|  | var _getLength = require('./_getLength.js'); | ||
|  | var contains = require('./contains.js'); | ||
|  | 
 | ||
|  | // Produce a duplicate-free version of the array. If the array has already
 | ||
|  | // been sorted, you have the option of using a faster algorithm.
 | ||
|  | // The faster algorithm will not work with an iteratee if the iteratee
 | ||
|  | // is not a one-to-one function, so providing an iteratee will disable
 | ||
|  | // the faster algorithm.
 | ||
|  | function uniq(array, isSorted, iteratee, context) { | ||
|  |   if (!isBoolean(isSorted)) { | ||
|  |     context = iteratee; | ||
|  |     iteratee = isSorted; | ||
|  |     isSorted = false; | ||
|  |   } | ||
|  |   if (iteratee != null) iteratee = _cb(iteratee, context); | ||
|  |   var result = []; | ||
|  |   var seen = []; | ||
|  |   for (var i = 0, length = _getLength(array); i < length; i++) { | ||
|  |     var value = array[i], | ||
|  |         computed = iteratee ? iteratee(value, i, array) : value; | ||
|  |     if (isSorted && !iteratee) { | ||
|  |       if (!i || seen !== computed) result.push(value); | ||
|  |       seen = computed; | ||
|  |     } else if (iteratee) { | ||
|  |       if (!contains(seen, computed)) { | ||
|  |         seen.push(computed); | ||
|  |         result.push(value); | ||
|  |       } | ||
|  |     } else if (!contains(result, value)) { | ||
|  |       result.push(value); | ||
|  |     } | ||
|  |   } | ||
|  |   return result; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = uniq; |