| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var aCallable = require('../internals/a-callable'); | 
| var requireObjectCoercible = require('../internals/require-object-coercible'); | 
| var iterate = require('../internals/iterate'); | 
| var MapHelpers = require('../internals/map-helpers'); | 
| var IS_PURE = require('../internals/is-pure'); | 
| var fails = require('../internals/fails'); | 
|   | 
| var Map = MapHelpers.Map; | 
| var has = MapHelpers.has; | 
| var get = MapHelpers.get; | 
| var set = MapHelpers.set; | 
| var push = uncurryThis([].push); | 
|   | 
| var DOES_NOT_WORK_WITH_PRIMITIVES = IS_PURE || fails(function () { | 
|   return Map.groupBy('ab', function (it) { | 
|     return it; | 
|   }).get('a').length !== 1; | 
| }); | 
|   | 
| // `Map.groupBy` method | 
| // https://tc39.es/ecma262/#sec-map.groupby | 
| $({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES }, { | 
|   groupBy: function groupBy(items, callbackfn) { | 
|     requireObjectCoercible(items); | 
|     aCallable(callbackfn); | 
|     var map = new Map(); | 
|     var k = 0; | 
|     iterate(items, function (value) { | 
|       var key = callbackfn(value, k++); | 
|       if (!has(map, key)) set(map, key, [value]); | 
|       else push(get(map, key), value); | 
|     }); | 
|     return map; | 
|   } | 
| }); |