js reduce实现
使用 reduce 实现数组求和
reduce 可以用于计算数组元素的总和。通过累加器(acc)逐步叠加当前值(curr):
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 输出 10
使用 reduce 实现数组去重
通过检查累加器中是否已存在当前值,实现数组去重:
const duplicates = [1, 2, 2, 3, 4, 4];
const unique = duplicates.reduce((acc, curr) =>
acc.includes(curr) ? acc : [...acc, curr], []
);
console.log(unique); // 输出 [1, 2, 3, 4]
使用 reduce 实现对象属性分组
根据对象的某个属性值进行分组,生成一个以属性值为键的对象:
const people = [
{ name: 'Alice', age: 21 },
{ name: 'Bob', age: 21 },
{ name: 'Charlie', age: 22 }
];
const groupedByAge = people.reduce((acc, person) => {
const key = person.age;
if (!acc[key]) acc[key] = [];
acc[key].push(person);
return acc;
}, {});
console.log(groupedByAge);
// 输出 { 21: [{...}, {...}], 22: [{...}] }
使用 reduce 实现扁平化二维数组
将二维数组转换为一维数组:
const nested = [[1, 2], [3, 4], [5, 6]];
const flat = nested.reduce((acc, curr) => acc.concat(curr), []);
console.log(flat); // 输出 [1, 2, 3, 4, 5, 6]
使用 reduce 实现统计字符出现次数
统计字符串中每个字符的出现次数:
const str = 'hello';
const charCount = str.split('').reduce((acc, char) => {
acc[char] = (acc[char] || 0) + 1;
return acc;
}, {});
console.log(charCount); // 输出 { h: 1, e: 1, l: 2, o: 1 }
注意事项
- 初始值(第二个参数)可选,但未提供时需确保数组非空,否则会抛出错误。
- 累加器(
acc)可以是任意类型(数组、对象、数字等),需根据场景选择。 - 避免在
reduce中直接修改原数组或累加器引用,保持纯函数特性。







