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

JS使用reduce实现嵌套数组子数组差值累加的问题

问题分析与修正方案

原代码存在的问题

  • 没有给reduce指定初始累加值,默认会把外层数组的第一个元素[10, 0]作为初始的acc值,acc本应该是数值类型的累加结果,这里变成了数组,后续计算逻辑完全错位。
  • 回调函数中重复计算第一个子数组的差值firstSubtract,且每次循环都会把该值重复加入结果,不符合“每个子数组只计算一次差值”的需求。
  • otherSubtract的计算逻辑完全错误:acc是累加数值,不存在[ind]索引取值;cur是当前遍历到的子数组,不需要按外层数组的索引ind取值,每个子数组只需要固定取自身第0位减第1位即可。

修正后的代码

const sumAndSubtract = (numberInNestedArray) => {
  // 给reduce指定初始累加值为0
  return numberInNestedArray.reduce((acc, cur) => {
    // 计算当前子数组的差值,累加到acc上
    return acc + (cur[0] - cur[1]);
  }, 0)
}

console.log(sumAndSubtract([
  [10, 0],
  [5, 7],
  [6, 9]
])) // 输出结果为5,符合预期

修正说明

  • 给reduce第二个参数传入0作为累加初始值,保证acc从始至终都是数值类型。
  • 每次遍历只对当前子数组cur计算差值cur[0] - cur[1],直接加到累加值acc上即可,无需多余的索引判断和重复计算。

内容的提问来源于stack exchange,提问作者Pit92

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:10