【发布时间】:2019-02-14 03:41:43
【问题描述】:
为什么javascript的reduce实现第一次迭代会跳过执行?
[1,2,3].reduce((acc, val) => {
console.log('acc',acc);
console.log('val',val)
return acc + val;
});
// acc 1
// val 2
// acc 3
// val 3
// 6
我注意到第一个语句执行从未运行(在这种情况下,我预计会有 6 个控制台日志,每个元素 2 个)。当我尝试在每次迭代中使用 reduce 执行具有副作用的函数时,这是非常出乎意料的行为。
在我使用过的其他语言中,传递的列表的每次迭代都会执行。有其他例子吗?
为什么会出现这种情况,为什么javascript的原生Array reduce的实现会这样呢?
========================== 编辑1/解决方案================== ======
为了确保它通过第一次迭代,给它一个初始值(这里的第二个参数/在这种情况下为 0)
[1,2,3].reduce((acc, val) => {
console.log('acc',acc);
console.log('val',val)
return acc + val;
}, 0);
【问题讨论】:
标签: javascript arrays functional-programming reduce