Spaces:
Runtime error
Runtime error
| // 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; | |
| }; | |
| }; | |