我想知道为什么在下面的示例中array.reduce()
中的索引从1而不是0开始
([11,22,33,44]).reduce((acc, val, index) => console.log(val));
//This outputs 22, 33 and 44 and skips 11
答案 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开始。