如何使用 Array.reduce() 方法在 JavaScript 中对数组元素进行求和?
- 内容介绍
- 文章标签
- 相关推荐
本文共计577个文字,预计阅读时间需要3分钟。
直接使用+Array.reduce()对数值数组求和,最简洁的方式是传入一个累加器函数,初始值设置为0。
基本用法:一行搞定求和
语法结构清晰:数组调用 reduce(),接收一个「累加函数」和可选的初始值。该函数每次接收两个参数——「上一次的结果(accumulator)」和「当前元素(currentValue)」。
- 如果不传初始值,
reduce()会默认用数组第一个元素作为 accumulator,从第二个元素开始遍历;但对空数组会报错 - 显式传
0作为初始值更安全,尤其当数组可能为空或类型不确定时
示例:
const numbers = [2, 4, 6, 8];const sum = numbers.reduce((acc, curr) => acc + curr, 0); // 结果:20
处理非纯数字数组
实际数据中,数组元素可能是字符串、null、undefined 或对象属性。需先做类型转换或提取。
立即学习“Java免费学习笔记(深入)”;
- 字符串数字:用
+curr或Number(curr)转为数值,无效值会变成NaN - 避免
NaN中断计算:可在累加前判断!isNaN(curr),或用curr ?? 0处理 null/undefined - 对象数组:提取特定字段再累加,例如
arr.reduce((s, item) => s + item.price, 0)
示例(含容错):
const mixed = ['1', 2, null, '3', undefined];const safeSum = mixed.reduce((acc, curr) => {
const num = Number(curr);
return isNaN(num) ? acc : acc + num;
}, 0); // 结果:6
常见误区提醒
初学者容易忽略返回值和初始值的影响:
- 累加函数里必须 显式 return,箭头函数单表达式可省略 return,但带大括号就必须写
- 忘记初始值且数组为空 → 报错
Reduce of empty array with no initial value - 混用其他类型(如对象、数组)作为 accumulator,导致隐式类型转换出乎意料,例如
[] + 1得到"1"
本文共计577个文字,预计阅读时间需要3分钟。
直接使用+Array.reduce()对数值数组求和,最简洁的方式是传入一个累加器函数,初始值设置为0。
基本用法:一行搞定求和
语法结构清晰:数组调用 reduce(),接收一个「累加函数」和可选的初始值。该函数每次接收两个参数——「上一次的结果(accumulator)」和「当前元素(currentValue)」。
- 如果不传初始值,
reduce()会默认用数组第一个元素作为 accumulator,从第二个元素开始遍历;但对空数组会报错 - 显式传
0作为初始值更安全,尤其当数组可能为空或类型不确定时
示例:
const numbers = [2, 4, 6, 8];const sum = numbers.reduce((acc, curr) => acc + curr, 0); // 结果:20
处理非纯数字数组
实际数据中,数组元素可能是字符串、null、undefined 或对象属性。需先做类型转换或提取。
立即学习“Java免费学习笔记(深入)”;
- 字符串数字:用
+curr或Number(curr)转为数值,无效值会变成NaN - 避免
NaN中断计算:可在累加前判断!isNaN(curr),或用curr ?? 0处理 null/undefined - 对象数组:提取特定字段再累加,例如
arr.reduce((s, item) => s + item.price, 0)
示例(含容错):
const mixed = ['1', 2, null, '3', undefined];const safeSum = mixed.reduce((acc, curr) => {
const num = Number(curr);
return isNaN(num) ? acc : acc + num;
}, 0); // 结果:6
常见误区提醒
初学者容易忽略返回值和初始值的影响:
- 累加函数里必须 显式 return,箭头函数单表达式可省略 return,但带大括号就必须写
- 忘记初始值且数组为空 → 报错
Reduce of empty array with no initial value - 混用其他类型(如对象、数组)作为 accumulator,导致隐式类型转换出乎意料,例如
[] + 1得到"1"

