为什么`array.reduce()`从第一个索引开始

时间:2019-05-02 18:13:51

标签: javascript ecmascript-6

我想知道为什么在下面的示例中array.reduce()中的索引从1而不是0开始

([11,22,33,44]).reduce((acc, val, index) => console.log(val));
//This outputs 22, 33 and 44 and skips 11

2 个答案:

答案 0 :(得分:6)

如果不将值作为第二个参数传递,则累加器将采用第一个值:

// add a vlaue to start
([11,22,33,44]).reduce((acc, val, index) => console.log(val), 0);
// now all values are iterated

如果您记录累加器,则可以看到如何在没有第二个arg的情况下使用所有值:

// Show accumulator return value
let final = ([11,22,33,44]).reduce((acc, val, index) => (console.log("acc:", acc, "val:", val), val));

// final is the last object that would have been the accumulator
console.log("final:", final)

答案 1 :(得分:3)

原因.reduce设计为无需初始累加器即可工作:

    [1, 2, 3].reduce((a, b) => a + b)

要使其正常工作,在第一次迭代中,a将是第一个元素,b将是第二个元素,下一个将采用先前的结果和第三个值。

如果将初始累加器作为第二个参数传递,则它将从索引0开始。