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