| 'use strict'; |
| 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 MapHelpers = require('../internals/map-helpers'); |
|
|
| var Map = MapHelpers.Map; |
| var mapGet = MapHelpers.get; |
| var mapHas = MapHelpers.has; |
| var mapSet = MapHelpers.set; |
| var push = uncurryThis([].push); |
|
|
| |
| |
| module.exports = function groupToMap(callbackfn ) { |
| 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; |
| }; |
|
|