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.
		
		
		
		
		
			
		
			
				
					45 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					45 lines
				
				1.5 KiB
			| 
											3 years ago
										 | // 0 -> Array#forEach
 | ||
|  | // 1 -> Array#map
 | ||
|  | // 2 -> Array#filter
 | ||
|  | // 3 -> Array#some
 | ||
|  | // 4 -> Array#every
 | ||
|  | // 5 -> Array#find
 | ||
|  | // 6 -> Array#findIndex
 | ||
|  | var ctx = require('./_ctx'); | ||
|  | var IObject = require('./_iobject'); | ||
|  | var toObject = require('./_to-object'); | ||
|  | var toLength = require('./_to-length'); | ||
|  | var asc = require('./_array-species-create'); | ||
|  | module.exports = function (TYPE, $create) { | ||
|  |   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; | ||
|  |   var create = $create || asc; | ||
|  |   return function ($this, callbackfn, that) { | ||
|  |     var O = toObject($this); | ||
|  |     var self = IObject(O); | ||
|  |     var f = ctx(callbackfn, that, 3); | ||
|  |     var length = toLength(self.length); | ||
|  |     var index = 0; | ||
|  |     var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; | ||
|  |     var val, res; | ||
|  |     for (;length > index; index++) if (NO_HOLES || index in self) { | ||
|  |       val = self[index]; | ||
|  |       res = f(val, index, O); | ||
|  |       if (TYPE) { | ||
|  |         if (IS_MAP) result[index] = res;   // map
 | ||
|  |         else if (res) switch (TYPE) { | ||
|  |           case 3: return true;             // some
 | ||
|  |           case 5: return val;              // find
 | ||
|  |           case 6: return index;            // findIndex
 | ||
|  |           case 2: result.push(val);        // filter
 | ||
|  |         } else if (IS_EVERY) return false; // every
 | ||
|  |       } | ||
|  |     } | ||
|  |     return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; | ||
|  |   }; | ||
|  | }; |