JavaScript reduce 方法详解
array.reduce((accumulator, currentValue, currentIndex, array) => {
// 处理逻辑
return accumulator;
}, initialValue);
-
accumulator (acc):累加器,存储上一次回调的返回值
-
currentValue (cur):当前正在处理的数组元素
-
currentIndex :当前元素的索引
-
array :原始数组
-
initialValue :初始值(可选)
-
总是提供初始值,避免空数组报错
-
适合将数组转换为其他数据结构
-
简单数组操作优先使用 map 或 filter
-
虽然 reduce 可以实现 map 、 filter 的功能,但应选择最适合的方法
-
确保每次迭代都返回累加器值
-
如果不提供初始值,数组第一个元素将作为初始值
-
空数组调用 reduce 且没有初始值会报错
-
回调函数必须有返回值
-
适合用于需要遍历一次数组的场景
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 输出: 15
const fruits = [‘apple’, ‘banana’, ‘apple’, ‘orange’, ‘banana’, ‘apple’];
const count = fruits.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {});
console.log(count); // 输出: { apple: 3, banana: 2, orange: 1 }
const nestedArray = [[1, 2], [3, 4], [5, 6]];
const flatArray = nestedArray.reduce((acc, cur) => acc.concat(cur), []);
console.log(flatArray); // 输出: [1, 2, 3, 4, 5, 6]
const users = [
{ id: 1, name: ‘张三’ },
{ id: 2, name: ‘李四’ },
{ id: 3, name: ‘王五’ }
];
const userMap = users.reduce((acc, cur) => {
acc[cur.id] = cur;
return acc;
}, {});
console.log(userMap);