最简写法是arr.reduce((sum, num) => sum + num, 0);必须传初始值0以防空数组报错,需确保操作数为数字,非纯数字数组应先转换或过滤。

直接用 reduce 对数字数组求和,最简写法是:arr.reduce((sum, num) => sum + num, 0)。初始值设为 0 很关键,否则空数组会报错,且能确保类型始终是数字。
基础用法:带初始值的累加
不传初始值时,reduce 会把第一个元素当初始值,遇到空数组直接抛错;传 0 则安全通用:
-
[1, 2, 3].reduce((a, b) => a + b, 0)→ 6 -
[].reduce((a, b) => a + b, 0)→ 0(不会报错) -
[5].reduce((a, b) => a + b, 0)→ 5(只有一项也正确)
处理非纯数字数组
如果数组含字符串、null 或 undefined,需先转成数字再累加,避免拼接或 NaN:
- 用
Number()转换:['1', '2', 3, null].reduce((sum, item) => sum + Number(item), 0)→ 6 - 过滤无效值更稳妥:
[1, '2', null, undefined, 3].filter(x => typeof x === 'number' && !isNaN(x)).reduce((a, b) => a + b, 0)→ 6
配合其他方法做复合统计
比如统计对象数组中某字段的总和:
const items = [{price: 10}, {price: 20}, {price: 15}];-
items.reduce((total, item) => total + item.price, 0)→ 45 - 也可链式处理:
items.map(i => i.price).reduce((a, b) => a + b, 0)
注意常见坑
以下写法容易出错:
-
arr.reduce((a, b) => a + b)—— 空数组报TypeError -
['1', '2'].reduce((a, b) => a + b)→ '12'(字符串拼接,不是数字相加) -
[1, 2, 3].reduce((a, b) => +a + +b)—— 冗余,+号强制转换没必要,直接用Number()或确保输入类型更清晰
核心就三点:传初始值 0、确保每步操作数是数字、空数组也要有合理返回。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











