| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var aCallable = require('../internals/a-callable'); | 
| var aMap = require('../internals/a-map'); | 
| var iterate = require('../internals/map-iterate'); | 
|   | 
| var $TypeError = TypeError; | 
|   | 
| // `Map.prototype.reduce` method | 
| // https://github.com/tc39/proposal-collection-methods | 
| $({ target: 'Map', proto: true, real: true, forced: true }, { | 
|   reduce: function reduce(callbackfn /* , initialValue */) { | 
|     var map = aMap(this); | 
|     var noInitial = arguments.length < 2; | 
|     var accumulator = noInitial ? undefined : arguments[1]; | 
|     aCallable(callbackfn); | 
|     iterate(map, function (value, key) { | 
|       if (noInitial) { | 
|         noInitial = false; | 
|         accumulator = value; | 
|       } else { | 
|         accumulator = callbackfn(accumulator, value, key, map); | 
|       } | 
|     }); | 
|     if (noInitial) throw new $TypeError('Reduce of empty map with no initial value'); | 
|     return accumulator; | 
|   } | 
| }); |