reduce是数组中将整个数组“压”成一个值的灵活方法,用于求和、找最大值、扁平化、对象分组等;核心为arr.reduce(callback, initialvalue),需注意return、初始值类型匹配及空数组报错问题。

reduce 是数组方法里最灵活也最容易用错的一个——它不直接返回新数组,而是把整个数组“压”成一个值,比如求和、找最大值、扁平化、对象分组等都靠它。
核心用法:两个参数最关键
调用格式:arr.reduce(callback, initialValue)
-
callback:接收四个参数,最常用前两个——
accumulator(累加器,上一轮返回的值)和currentValue(当前项) - initialValue(可选):第一次调用 callback 时 accumulator 的初始值;没传的话,accumulator 默认取数组第一个元素,currentValue 从第二个开始
常见场景与写法
求和 / 乘积
[1, 2, 3, 4].reduce((sum, n) => sum + n, 0); // 10 [2, 3, 4].reduce((prod, n) => prod * n, 1); // 24
找最大值
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
[5, 2, 8, 1].reduce((max, n) => n > max ? n : max); // 8(没传 initial,max 初始为 5)
数组转对象(按 key 分组)
const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
users.reduce((obj, user) => {
obj[user.id] = user;
return obj;
}, {}); // {1: {id:1, name:'Alice'}, 2: {id:2, name:'Bob'}}
扁平化二维数组
[[1, 2], [3, 4], [5]].reduce((flat, arr) => flat.concat(arr), []); // [1, 2, 3, 4, 5]
容易踩的坑
- 忘记 return —— callback 必须显式返回 accumulator,否则下一轮 accumulator 变成
undefined - initialValue 类型不匹配 —— 比如用空字符串做初始值去累加数字,结果会变成
"0123" - 空数组没传 initialValue 会报错 ——
[].reduce(() => {}) throws TypeError
替代 for 循环?看情况
reduce 更适合「有明确聚合目标」的逻辑(合并、统计、转换结构)。单纯遍历或需要中途 break,用 for 或 some/every 更直观。它不是万能替代品,但一旦用对,代码会非常简洁有力。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










