为什么我的JavaScript代码中reduce函数看起来被跳过未执行?
问题原因说明
reduce逻辑没有被跳过,你看到的结果不符合预期是两个代码错误导致的:
- 数组初始化错误:
lastArr初始值设置为[''](空字符串),且reduce未传入初始累加值,会默认取数组第一个元素(空字符串)作为累加初始值,后续和数字相加时触发字符串拼接逻辑,而非数值求和。
以你调用sumAll(1,4)为例,执行后lastArr实际为['',1,2,3],reduce执行后的结果是字符串'123',这就是你console.log拿到的结果,不是newArr的返回值。 - 循环边界错误:循环判断条件写为
i < sortedArr[1],会漏掉区间的最大值,比如1~4的求和场景里,只会把1、2、3加入数组,缺失了4。
修正后代码
const sumAll = function(...args) { let newArr = [...args]; let sortedArr = newArr.sort(function(a,b) { return a - b; }) // 初始化空数组,不要添加空字符串初始元素 let lastArr = [] // 边界调整为<=,覆盖区间最大值 for (let i = sortedArr[0]; i <= sortedArr[1]; ++i ) { lastArr.push(i) } // 给reduce传入初始累加值0,保证全程是数值运算 let reducedArr = lastArr.reduce(function(previousValue,currentValue) { return previousValue + currentValue; }, 0) return reducedArr; }; console.log(sumAll(1,4)); // 输出10,即1+2+3+4的正确结果
内容的提问来源于stack exchange,提问作者I.blue
相关产品推荐
相关产品推荐

