回調函數第一次執行時,
accumulator
和
currentValue
的取值有兩種情況:調用
reduce
時提供
initialValue
,
accumulator
取值為
initialValue
,
currentValue
取數組中的第一個值;沒有提供
initialValue
,
accumulator
取數組中的第一個值,
currentValue
取數組中的第二個值。
注意:如果沒有提供
initialValue
,reduce 會從索引1的地方開始執行 callback 方法,跳過第一個索引。如果提供
initialValue
,從索引0開始。
如果數組為空且沒有提供
initialValue
,會抛出
TypeError
。如果數組僅有一個元素(無論位置如何)并且沒有提供
initialValue
, 或者有提供
initialValue
但是數組為空,那麼此唯一值将被傳回并且
callback
不會被執行。
[1, 2, 3,4].reduce(function(sum, value,index) {
console.log("sum::"+sum);
console.log("value::"+value);
console.log(1000,index);
return sum + value;
});
sum::1
value::2
1000 1
sum::3
value::3
1000 2
sum::6
value::4
1000 3
10
[1, 2, 3,4].reduce(function(sum, value,index) {
console.log("sum::"+sum);
console.log("value::"+value);
console.log(1000,index);
return sum + value;
},0);
sum::0
value::1
1000 0
sum::1
value::2
1000 1
sum::3
value::3
1000 2
sum::6
value::4
1000 3
10
[1, 2, 3,4].reduce(function(sum, value,index) {
console.log("sum::"+sum);
console.log("value::"+value);
console.log(1000,index);
return sum + value;
},10);
sum::10
value::1
1000 0
sum::11
value::2
1000 1
sum::13
value::3
1000 2
sum::16
value::4
1000 3
20