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