为何我的JavaScript reduce函数返回值异常?预期9000却得256000
reduce函数求和出错的原因及修正方案
你的代码问题出在对reduce函数的回调参数使用错误,导致计算逻辑完全偏离预期:
- 你写的
reduce(x => x + x)只传入了一个参数,这个参数实际是累加器(acc),每次执行都是把累加器和自身相加(相当于翻倍),而不是累加当前遍历到的元素。 - 同时没有设置初始值,
reduce会默认把数组第一个元素作为初始累加器,后续迭代持续翻倍,最终得到错误结果。
具体计算过程
flat()后的数组是[1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000](共9个1000):
- 初始累加器为第一个元素
1000 - 第1次迭代:
1000 + 1000 = 2000(累加器变为2000) - 第2次迭代:
2000 + 2000 = 4000(累加器变为4000) - ... 以此类推,共迭代8次,最终得到
1000 * 2^8 = 256000
修正后的代码
需要给reduce传入包含累加器和当前元素的正确回调,同时建议设置初始值0(避免数组为空时抛出错误):
function combined(...s) { return s.flat().reduce((acc, curr) => acc + curr, 0) } console.log(combined([1000, 1000, 1000], [1000, 1000, 1000], [1000, 1000, 1000])) // 输出9000
内容的提问来源于stack exchange,提问作者user20499081
相关产品推荐
相关产品推荐

