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.
32 lines
1.2 KiB
32 lines
1.2 KiB
'use strict'; |
|
var getBuiltIn = require('../internals/get-built-in'); |
|
var bind = require('../internals/function-bind-context'); |
|
var uncurryThis = require('../internals/function-uncurry-this'); |
|
var IndexedObject = require('../internals/indexed-object'); |
|
var toObject = require('../internals/to-object'); |
|
var lengthOfArrayLike = require('../internals/length-of-array-like'); |
|
|
|
var Map = getBuiltIn('Map'); |
|
var MapPrototype = Map.prototype; |
|
var mapGet = uncurryThis(MapPrototype.get); |
|
var mapHas = uncurryThis(MapPrototype.has); |
|
var mapSet = uncurryThis(MapPrototype.set); |
|
var push = uncurryThis([].push); |
|
|
|
// `Array.prototype.groupToMap` method |
|
// https://github.com/tc39/proposal-array-grouping |
|
module.exports = function groupToMap(callbackfn /* , thisArg */) { |
|
var O = toObject(this); |
|
var self = IndexedObject(O); |
|
var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined); |
|
var map = new Map(); |
|
var length = lengthOfArrayLike(self); |
|
var index = 0; |
|
var key, value; |
|
for (;length > index; index++) { |
|
value = self[index]; |
|
key = boundFunction(value, index, O); |
|
if (mapHas(map, key)) push(mapGet(map, key), value); |
|
else mapSet(map, key, [value]); |
|
} return map; |
|
};
|
|
|