ES5 (js 1.8)加入了 reduce

 

    接收一个函数,然后从左到右遍历item,直到reduce到一个值。

 



arr.reduce(callback, [initialValue]);



 

   参数:

 

  • callback(previousValue, currentValue, index, array)
  1. previousValue   如果指定了initialValue,那就用initialValue 或者 是上一次循环返回的值
  2. currentValue      当前执行到的数组的值
  3. index                   当前执行到的数组的下标
  4. array                    执行reduce的array

 

 

  • initialValue

     callback 调用时候的第一个参数

 

 

   我们来直观地看一个例子:

 

    

array的reduce_reduce


 

 

   第一次执行的reduce里面的callback的arguments的情况:

 

    

array的reduce_microsoft_02


 

  我们看到,如果你指定了initialValue的化,第一次执行的时候,callback的第一个参数就是它,而index为0

 

 

 

   那如果没有指定initialValue呢?

 

 

     

array的reduce_es5_03

 

     

array的reduce_数组_04


 

previousValue取arr[0],然后index为1

 

 

 

    那说了这么多,它有没有什么用?

 

 

  • 把一个数组里面的数字做加法:

 

 


[1,2,3,4].reduce(function(a, b) { return a + b;});


 

 

  • 合并二维数组:

[[0,1], [2,3], [4,5]].reduce(function(a, b) { return a.concat(b);});