You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的JavaScript reduce函数返回值异常?预期9000却得256000

reduce函数求和出错的原因及修正方案

你的代码问题出在对reduce函数的回调参数使用错误,导致计算逻辑完全偏离预期:

  • 你写的reduce(x => x + x)只传入了一个参数,这个参数实际是累加器(acc),每次执行都是把累加器和自身相加(相当于翻倍),而不是累加当前遍历到的元素。
  • 同时没有设置初始值,reduce会默认把数组第一个元素作为初始累加器,后续迭代持续翻倍,最终得到错误结果。

具体计算过程

flat()后的数组是[1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000](共9个1000):

  1. 初始累加器为第一个元素1000
  2. 第1次迭代:1000 + 1000 = 2000(累加器变为2000)
  3. 第2次迭代:2000 + 2000 = 4000(累加器变为4000)
  4. ... 以此类推,共迭代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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:05:21