You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							2.5 KiB
						
					
					
				var bind = require('../internals/function-bind-context'); | 
						|
var IndexedObject = require('../internals/indexed-object'); | 
						|
var toObject = require('../internals/to-object'); | 
						|
var toLength = require('../internals/to-length'); | 
						|
var arraySpeciesCreate = require('../internals/array-species-create'); | 
						|
 | 
						|
var push = [].push; | 
						|
 | 
						|
// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` 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 NO_HOLES = TYPE == 5 || IS_FIND_INDEX; | 
						|
  return function ($this, callbackfn, that, specificCreate) { | 
						|
    var O = toObject($this); | 
						|
    var self = IndexedObject(O); | 
						|
    var boundFunction = bind(callbackfn, that, 3); | 
						|
    var length = toLength(self.length); | 
						|
    var index = 0; | 
						|
    var create = specificCreate || arraySpeciesCreate; | 
						|
    var target = IS_MAP ? create($this, length) : IS_FILTER ? 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.call(target, value); // filter | 
						|
        } else if (IS_EVERY) return false;  // every | 
						|
      } | 
						|
    } | 
						|
    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; | 
						|
  }; | 
						|
}; | 
						|
 | 
						|
module.exports = { | 
						|
  // `Array.prototype.forEach` method | 
						|
  // https://tc39.github.io/ecma262/#sec-array.prototype.foreach | 
						|
  forEach: createMethod(0), | 
						|
  // `Array.prototype.map` method | 
						|
  // https://tc39.github.io/ecma262/#sec-array.prototype.map | 
						|
  map: createMethod(1), | 
						|
  // `Array.prototype.filter` method | 
						|
  // https://tc39.github.io/ecma262/#sec-array.prototype.filter | 
						|
  filter: createMethod(2), | 
						|
  // `Array.prototype.some` method | 
						|
  // https://tc39.github.io/ecma262/#sec-array.prototype.some | 
						|
  some: createMethod(3), | 
						|
  // `Array.prototype.every` method | 
						|
  // https://tc39.github.io/ecma262/#sec-array.prototype.every | 
						|
  every: createMethod(4), | 
						|
  // `Array.prototype.find` method | 
						|
  // https://tc39.github.io/ecma262/#sec-array.prototype.find | 
						|
  find: createMethod(5), | 
						|
  // `Array.prototype.findIndex` method | 
						|
  // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex | 
						|
  findIndex: createMethod(6) | 
						|
};
 | 
						|
 |