| | |
| | | 'use strict'; |
| | | var getBuiltIn = require('../internals/get-built-in'); |
| | | var uncurryThis = require('../internals/function-uncurry-this'); |
| | | var aCallable = require('../internals/a-callable'); |
| | | var lengthOfArrayLike = require('../internals/length-of-array-like'); |
| | | var toObject = require('../internals/to-object'); |
| | | var getBuiltIn = require('../internals/get-built-in'); |
| | | var arraySpeciesCreate = require('../internals/array-species-create'); |
| | | |
| | | var push = [].push; |
| | | var Map = getBuiltIn('Map'); |
| | | var MapPrototype = Map.prototype; |
| | | var mapForEach = uncurryThis(MapPrototype.forEach); |
| | | var mapHas = uncurryThis(MapPrototype.has); |
| | | var mapSet = uncurryThis(MapPrototype.set); |
| | | var push = uncurryThis([].push); |
| | | |
| | | // `Array.prototype.uniqueBy` method |
| | | // https://github.com/tc39/proposal-array-unique |
| | |
| | | var that = toObject(this); |
| | | var length = lengthOfArrayLike(that); |
| | | var result = arraySpeciesCreate(that, 0); |
| | | var Map = getBuiltIn('Map'); |
| | | var map = new Map(); |
| | | var resolverFunction, index, item, key; |
| | | if (resolver != null) resolverFunction = aCallable(resolver); |
| | | else resolverFunction = function (value) { |
| | | var resolverFunction = resolver != null ? aCallable(resolver) : function (value) { |
| | | return value; |
| | | }; |
| | | var index, item, key; |
| | | for (index = 0; index < length; index++) { |
| | | item = that[index]; |
| | | key = resolverFunction(item); |
| | | if (!map.has(key)) map.set(key, item); |
| | | if (!mapHas(map, key)) mapSet(map, key, item); |
| | | } |
| | | map.forEach(function (value) { |
| | | push.call(result, value); |
| | | mapForEach(map, function (value) { |
| | | push(result, value); |
| | | }); |
| | | return result; |
| | | }; |