Array.reduce() 累加归并
最后更新:2026-09-09
Array.reduce() 累加归并
reduce 把数组归并成单个值:回调对每个元素累积计算,最终返回累积结果。求和、计数、分组、扁平化都靠它,是函数式数组处理的核心。
| 分类 | 数组 |
|---|---|
| ES 版本 | ES5(2009) |
📝 语法
const 结果 = 数组.reduce((累积值, 当前元素, 下标, 原数组) => 新累积值, 初始值);
⚙️ 参数
| callback | 累积函数:返回值作为下一轮的累积值。 |
|---|---|
| initialValue | 可选。累积的初始值;省略时用第一个元素充当,且从下标 1 开始遍历;空数组省略初始值会抛 TypeError。 |
返回值:累积计算的最终结果。
是否修改原值:否(返回新值)
▶ 示例
编辑下方代码,点击运行,在输出面板查看结果:
运行结果:
10
2
{ '苹果': 2, '香蕉': 1 }
⚠️ 警告 空数组调用 reduce 且不给初始值会抛 TypeError: Reduce of empty array with no initial value——永远传初始值。
💡 提示 reduce 能实现 map/filter 的功能,但可读性差——简单转换用 map/filter,真正的多进一出归并才用 reduce。
🌐 浏览器支持
| 浏览器 | |||||
|---|---|---|---|---|---|
| Array.reduce() | ✓ v1 | ✓ v12 | ✓ v1.5 | ✓ v3 | ✓ v10.5 |
| 所有现代浏览器均支持 | |||||
🏷️ 相关数组方法
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Qreduce 的初始值什么时候必须给?
A数组可能为空时必须给,否则抛 TypeError。对象数组做统计时也建议给(通常 {} 或 0),类型更明确。
Qreduce 能替代 map 和 filter 吗?
A技术上能,但可读性差。简单转换用 map、筛选用 filter,reduce 留给需要把数组折叠成不同结构(单值/对象/新形状)的场景。
Qreduce 的回调返回值很重要吗?
A极其重要:返回值就是下一轮的累积值。箭头函数忘写 return(带花括号时)会让累积值变成 undefined。