36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| var uncurryThis = require('../internals/function-uncurry-this');
 | |
| var aCallable = require('../internals/a-callable');
 | |
| var isNullOrUndefined = require('../internals/is-null-or-undefined');
 | |
| var lengthOfArrayLike = require('../internals/length-of-array-like');
 | |
| var toObject = require('../internals/to-object');
 | |
| var MapHelpers = require('../internals/map-helpers');
 | |
| var iterate = require('../internals/map-iterate');
 | |
| 
 | |
| var Map = MapHelpers.Map;
 | |
| var mapHas = MapHelpers.has;
 | |
| var mapSet = MapHelpers.set;
 | |
| var push = uncurryThis([].push);
 | |
| 
 | |
| // `Array.prototype.uniqueBy` method
 | |
| // https://github.com/tc39/proposal-array-unique
 | |
| module.exports = function uniqueBy(resolver) {
 | |
|   var that = toObject(this);
 | |
|   var length = lengthOfArrayLike(that);
 | |
|   var result = [];
 | |
|   var map = new Map();
 | |
|   var resolverFunction = !isNullOrUndefined(resolver) ? aCallable(resolver) : function (value) {
 | |
|     return value;
 | |
|   };
 | |
|   var index, item, key;
 | |
|   for (index = 0; index < length; index++) {
 | |
|     item = that[index];
 | |
|     key = resolverFunction(item);
 | |
|     if (!mapHas(map, key)) mapSet(map, key, item);
 | |
|   }
 | |
|   iterate(map, function (value) {
 | |
|     push(result, value);
 | |
|   });
 | |
|   return result;
 | |
| };
 | 
