最常用、最清晰的数组累加统计方式是 reduce() 方法;for...of 或 forEach() + 外部变量适用于需中断、副作用或异步处理的场景;需注意初始值、数据类型转换及避免副作用。

在 JavaScript 中,数组遍历实现累加统计最常用、最清晰的方式是用 reduce() 方法;若需边遍历边做其他操作(比如条件过滤、异步处理),也可配合 for...of 或 forEach() + 外部变量完成。
用 reduce 实现简洁可靠的累加
reduce 是专为“归约”设计的数组方法,天然适合累加统计。它接收一个累加器(accumulator)和当前项(currentValue),返回最终结果。
- 基础写法:arr.reduce((sum, item) => sum + item, 0) —— 对数字数组求和,初始值设为 0 避免 undefined 相加
- 统计满足条件的元素个数:arr.reduce((count, item) => item > 10 ? count + 1 : count, 0)
- 按属性累加(如计算商品总价):cartItems.reduce((total, item) => total + item.price * item.qty, 0)
用 for...of 遍历 + 手动累加(灵活可控)
适合需要中断循环(break)、提前退出、或在累加过程中执行副作用(如打印、调用 API)的场景。
- 示例:累加正数,遇到负数就停止
let sum = 0;
for (const num of numbers) {
if (num sum += num;
} - 优势是逻辑直观、调试方便,且可随时访问索引(改用 for (let i = 0; i )
用 forEach 配合外部变量(简单但注意作用域)
forEach 本身不返回值,需借助外部声明的变量来保存累计结果。
- 写法:let total = 0;
arr.forEach(item => { total += item.amount || 0; }); - 注意:不能用 return 中断循环(它只跳出当前回调),也不适用于需要链式调用的场景
- 适合一次性、无中断需求的轻量统计
避免常见错误
- 忘记设置初始值(如 reduce((a,b)=>a+b))→ 第一次 a 是数组第一个元素,b 是第二个;若数组为空会报错
- 混用数据类型导致隐式转换(如字符串 '1' + 数字 2 → '12')→ 显式转成数字:Number(item) 或 +item
- 在 reduce 回调里修改原数组或累加器对象(如 push 到数组)→ 虽可行,但违背函数式习惯,易引发意外副作用


















