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