ES5 (js 1.8)加入了 reduce
接收一个函数,然后从左到右遍历item,直到reduce到一个值。
arr.reduce(callback, [initialValue]);
参数:
- callback(previousValue, currentValue, index, array)
- previousValue 如果指定了initialValue,那就用initialValue 或者 是上一次循环返回的值
- currentValue 当前执行到的数组的值
- index 当前执行到的数组的下标
- array 执行reduce的array
- initialValue
callback 调用时候的第一个参数
我们来直观地看一个例子:
第一次执行的reduce里面的callback的arguments的情况:
我们看到,如果你指定了initialValue的化,第一次执行的时候,callback的第一个参数就是它,而index为0
那如果没有指定initialValue呢?
如果没有指定initialValue的化,第一次执行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); });
扩展阅读:
http://msdn.microsoft.com/zh-cn/library/ie/ff679975(v=vs.94).aspx