1234567891011121314151617181920212223242526272829303132333435 |
- '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;
- };
|