'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; 
 | 
  } 
 | 
}); 
 |