JavaScript如何计算数组中累加到指定元素位置的数字总和
问题原因
你调用.reduce得到整个数组的求和结果,是因为原生.reduce默认会遍历完数组所有元素,你没有添加遇到目标值7后停止累加的判断逻辑。
基于
.reduce的正确实现 .reduce本身没有内置中断遍历的能力,我们可以通过一个状态标记,记录是否已经遍历到值为7的元素,标记生效后后续元素不再参与累加即可。需求是统计到7所在位置为止,因此7本身需要计入总和:
const array = [6,2,6,7,5,9]; let isEnd = false; const sum = array.reduce((total, current) => { if (isEnd) return total; const newTotal = total + current; if (current === 7) isEnd = true; return newTotal; }, 0); console.log(sum); // 输出21,即6+2+6+7的计算结果
如果你不需要把7本身计入总和,只需要把标记赋值的逻辑移到累加操作之前即可。
更简洁的替代实现
如果不强制要求单次遍历+reduce完成,也可以先定位目标值的索引,截断数组后再求和,逻辑更直观:
const array = [6,2,6,7,5,9]; const endIndex = array.indexOf(7); // slice的第二个参数是截断位置的下一位,因此+1才能包含endIndex位置的元素 const sum = array.slice(0, endIndex + 1).reduce((a, b) => a + b, 0); console.log(sum); // 同样输出21
注意:如果数组中不存在值为
7的元素,indexOf会返回-1,此时需要额外加边界判断避免计算错误。
内容的提问来源于stack exchange,提问作者Atul Yadav
相关产品推荐
相关产品推荐

