| 'use strict'; | 
| var bind = require('../internals/function-bind-context'); | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var IndexedObject = require('../internals/indexed-object'); | 
| var toObject = require('../internals/to-object'); | 
| var lengthOfArrayLike = require('../internals/length-of-array-like'); | 
| var arraySpeciesCreate = require('../internals/array-species-create'); | 
|   | 
| var push = uncurryThis([].push); | 
|   | 
| // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation | 
| var createMethod = function (TYPE) { | 
|   var IS_MAP = TYPE === 1; | 
|   var IS_FILTER = TYPE === 2; | 
|   var IS_SOME = TYPE === 3; | 
|   var IS_EVERY = TYPE === 4; | 
|   var IS_FIND_INDEX = TYPE === 6; | 
|   var IS_FILTER_REJECT = TYPE === 7; | 
|   var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; | 
|   return function ($this, callbackfn, that, specificCreate) { | 
|     var O = toObject($this); | 
|     var self = IndexedObject(O); | 
|     var length = lengthOfArrayLike(self); | 
|     var boundFunction = bind(callbackfn, that); | 
|     var index = 0; | 
|     var create = specificCreate || arraySpeciesCreate; | 
|     var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; | 
|     var value, result; | 
|     for (;length > index; index++) if (NO_HOLES || index in self) { | 
|       value = self[index]; | 
|       result = boundFunction(value, index, O); | 
|       if (TYPE) { | 
|         if (IS_MAP) target[index] = result; // map | 
|         else if (result) switch (TYPE) { | 
|           case 3: return true;              // some | 
|           case 5: return value;             // find | 
|           case 6: return index;             // findIndex | 
|           case 2: push(target, value);      // filter | 
|         } else switch (TYPE) { | 
|           case 4: return false;             // every | 
|           case 7: push(target, value);      // filterReject | 
|         } | 
|       } | 
|     } | 
|     return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; | 
|   }; | 
| }; | 
|   | 
| module.exports = { | 
|   // `Array.prototype.forEach` method | 
|   // https://tc39.es/ecma262/#sec-array.prototype.foreach | 
|   forEach: createMethod(0), | 
|   // `Array.prototype.map` method | 
|   // https://tc39.es/ecma262/#sec-array.prototype.map | 
|   map: createMethod(1), | 
|   // `Array.prototype.filter` method | 
|   // https://tc39.es/ecma262/#sec-array.prototype.filter | 
|   filter: createMethod(2), | 
|   // `Array.prototype.some` method | 
|   // https://tc39.es/ecma262/#sec-array.prototype.some | 
|   some: createMethod(3), | 
|   // `Array.prototype.every` method | 
|   // https://tc39.es/ecma262/#sec-array.prototype.every | 
|   every: createMethod(4), | 
|   // `Array.prototype.find` method | 
|   // https://tc39.es/ecma262/#sec-array.prototype.find | 
|   find: createMethod(5), | 
|   // `Array.prototype.findIndex` method | 
|   // https://tc39.es/ecma262/#sec-array.prototype.findIndex | 
|   findIndex: createMethod(6), | 
|   // `Array.prototype.filterReject` method | 
|   // https://github.com/tc39/proposal-array-filtering | 
|   filterReject: createMethod(7) | 
| }; |