| 'use strict'; |
| var $ = require('../internals/export'); |
| var iterate = require('../internals/iterate'); |
| var aFunction = require('../internals/a-function'); |
| |
| // `Map.groupBy` method |
| // https://github.com/tc39/proposal-collection-methods |
| $({ target: 'Map', stat: true }, { |
| groupBy: function groupBy(iterable, keyDerivative) { |
| var newMap = new this(); |
| aFunction(keyDerivative); |
| var has = aFunction(newMap.has); |
| var get = aFunction(newMap.get); |
| var set = aFunction(newMap.set); |
| iterate(iterable, function (element) { |
| var derivedKey = keyDerivative(element); |
| if (!has.call(newMap, derivedKey)) set.call(newMap, derivedKey, [element]); |
| else get.call(newMap, derivedKey).push(element); |
| }); |
| return newMap; |
| } |
| }); |