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
相关产品推荐
相关产品推荐

