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.
		
		
		
		
		
			
		
			
				
					
					
						
							37 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							37 lines
						
					
					
						
							1.2 KiB
						
					
					
				| import isBoolean from './isBoolean.js';
 | |
| import cb from './_cb.js';
 | |
| import getLength from './_getLength.js';
 | |
| import contains from './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.
 | |
| export default 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;
 | |
| }
 |