JavaScript使用for循环求数组过滤后元素和时返回0的问题排查
代码错误点
- 核心错误:你在if分支内声明了
sumFiltered求和函数,但始终没有调用它,求和逻辑从未执行,sum2始终保持初始值0 - 隐含错误:
sumFiltered内部取数组元素时错用了外层循环的变量i,而非内层循环的j,就算调用函数也会得到错误的求和结果 - 逻辑冗余:不需要额外声明
sumFiltered函数,也不需要单独用数组存储符合条件的元素,在筛选判断时直接累加即可
修复后的代码
最简写法(直接累加,无需额外存储筛选数组)
function sumSmallNumbers(n) { let sum2 = 0; for (let i = 0; i < n.length; i++) { if (n[i] > 0 && n[i] < 1001) { sum2 += n[i]; } } return sum2; }
保留原有筛选数组逻辑的修改版
function sumSmallNumbers(n) { let smallNumbers = []; var sum2 = 0; // 第一步:筛选符合条件的元素 for (let i = 0; i < n.length; i++) { if (n[i] > 0 && n[i] < 1001) { smallNumbers.push(n[i]); } } // 第二步:遍历筛选后的数组求和 for (let j = 0; j < smallNumbers.length; j++) { sum2 += smallNumbers[j]; } return sum2; }
验证示例
输入sumSmallNumbers([1, 1002, -5, 999]),返回结果为1000,符合预期。
内容的提问来源于stack exchange,提问作者svrt
相关产品推荐
相关产品推荐

