Version 1
[yaffs-website] / node_modules / core-js / library / modules / _array-methods.js
1 // 0 -> Array#forEach
2 // 1 -> Array#map
3 // 2 -> Array#filter
4 // 3 -> Array#some
5 // 4 -> Array#every
6 // 5 -> Array#find
7 // 6 -> Array#findIndex
8 var ctx      = require('./_ctx')
9   , IObject  = require('./_iobject')
10   , toObject = require('./_to-object')
11   , toLength = require('./_to-length')
12   , asc      = require('./_array-species-create');
13 module.exports = function(TYPE, $create){
14   var IS_MAP        = TYPE == 1
15     , IS_FILTER     = TYPE == 2
16     , IS_SOME       = TYPE == 3
17     , IS_EVERY      = TYPE == 4
18     , IS_FIND_INDEX = TYPE == 6
19     , NO_HOLES      = TYPE == 5 || IS_FIND_INDEX
20     , create        = $create || asc;
21   return function($this, callbackfn, that){
22     var O      = toObject($this)
23       , self   = IObject(O)
24       , f      = ctx(callbackfn, that, 3)
25       , length = toLength(self.length)
26       , index  = 0
27       , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined
28       , val, res;
29     for(;length > index; index++)if(NO_HOLES || index in self){
30       val = self[index];
31       res = f(val, index, O);
32       if(TYPE){
33         if(IS_MAP)result[index] = res;            // map
34         else if(res)switch(TYPE){
35           case 3: return true;                    // some
36           case 5: return val;                     // find
37           case 6: return index;                   // findIndex
38           case 2: result.push(val);               // filter
39         } else if(IS_EVERY)return false;          // every
40       }
41     }
42     return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
43   };
44 };