esnext.map.group-by.js 755 B

12345678910111213141516171819202122
  1. 'use strict';
  2. var $ = require('../internals/export');
  3. var iterate = require('../internals/iterate');
  4. var aFunction = require('../internals/a-function');
  5. // `Map.groupBy` method
  6. // https://github.com/tc39/proposal-collection-methods
  7. $({ target: 'Map', stat: true }, {
  8. groupBy: function groupBy(iterable, keyDerivative) {
  9. var newMap = new this();
  10. aFunction(keyDerivative);
  11. var has = aFunction(newMap.has);
  12. var get = aFunction(newMap.get);
  13. var set = aFunction(newMap.set);
  14. iterate(iterable, function (element) {
  15. var derivedKey = keyDerivative(element);
  16. if (!has.call(newMap, derivedKey)) set.call(newMap, derivedKey, [element]);
  17. else get.call(newMap, derivedKey).push(element);
  18. });
  19. return newMap;
  20. }
  21. });