使用JavaScript的forEach计算总和失败,仅输出中间值而非最终结果
问题分析与解决
你的代码之所以会输出累加过程中的各个值而非最终总和,核心问题有两个:
- console.log位置错误:你把
console.log(sum2)写在了forEach的回调函数内部,每次执行forEach(也就是每个月度差值被累加到sum2后)都会立刻打印当前的sum2,自然会输出每一步的中间结果。 - 不必要的forEach使用:你每次创建一个只包含单个元素的
newArray,再用forEach去遍历累加,这完全是多此一举,直接对monthDiff进行累加操作即可。
修正方案一(简化代码,去掉多余的forEach)
const finances = [ ["Jan", 867884], ["Feb", 984655], ["Mar", 322013], ["Apr", -69417], ["May", 310503], ]; let sum2 = 0; for (let i = 0; i < finances.length - 1; i++) { let monthDiff = finances[i][1] - finances[i + 1][1]; sum2 += monthDiff; // 直接累加单个数值,无需forEach } console.log(sum2); // 循环结束后再打印最终总和
修正方案二(保留forEach,调整console.log位置)
如果一定要用forEach(虽然没必要),只需把打印语句移到所有循环外面:
const finances = [ ["Jan", 867884], ["Feb", 984655], ["Mar", 322013], ["Apr", -69417], ["May", 310503], ]; let sum2 = 0; for (let i = 0; i < finances.length - 1; i++) { let monthDiff = finances[i][1] - finances[i + 1][1]; const newArray = [monthDiff]; newArray.forEach((item) => { sum2 += item; }); } console.log(sum2); // 所有累加完成后打印最终总和
内容的提问来源于stack exchange,提问作者user20581800
相关产品推荐
相关产品推荐

