js中reduce的用法

从左到右遍历数组的一种方式

arr.reduce(callback(previousValue,currentValue,index,array), [initialValue]);

callback 函数中 previousValue 等于 initialValue 的值或者是上一次 reduce return 回来的值

currentValue 是当前执行到的数组的值

index 是当前执行到的数组的下标

array 是执行 reducearray

尝试:

1
2
3
4
5
6
var a = [1,2,3,4,5,6]
a.reduce(
function(a,b,c,d){
console.log( 'previousValue= '+a+ ';currentValue= '+b+ ';index= '+c+ ';array= '+d)
return a
},[1,2,3,4])

得到结果

1
2
3
4
5
6
7
8
9
10
11
previousValue=1,2,3,4;currentValue=1;index=0;array=1,2,3,4,5,6

previousValue=1,2,3,4;currentValue=2;index=1;array=1,2,3,4,5,6

previousValue=1,2,3,4;currentValue=3;index=2;array=1,2,3,4,5,6

previousValue=1,2,3,4;currentValue=4;index=3;array=1,2,3,4,5,6

previousValue=1,2,3,4;currentValue=5;index=4;array=1,2,3,4,5,6

previousValue=1,2,3,4;currentValue=6;index=5;array=1,2,3,4,5,6

可以感受到其用法。

例如数组累加:

1
2
3
var a = [2,4,6,1]
sum = a.reduce(function(prev,cur){return prev+cur})
//sum = 13


因此vuejs中filterBy代码中的

1
2
3
var keys=toArray(arguments,n).reduce(function(prev,cur) {
return prev.concat(cur);
},[]);

用途是将数组扁平化。

例如

1
2
3
4
5
6
7
8
9
var a= [
[1, 2],
[3, 4],
[5, 6]
];
var b= a.reduce(function (prev, cur) {
return prev.concat(cur);
});
//b = [1,2,3,4,5,6]