reduce实现js
使用 reduce 实现数组求和
reduce 可以对数组元素累加求和。初始值设为 0,回调函数将当前值累加到总和:
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((total, num) => total + num, 0);
console.log(sum); // 输出: 10
使用 reduce 实现数组扁平化
通过递归处理嵌套数组,reduce 可将多维数组扁平化为一维数组:
const nestedArray = [1, [2, [3, [4]]]];
const flatten = arr =>
arr.reduce((flat, item) =>
flat.concat(Array.isArray(item) ? flatten(item) : item), []);
console.log(flatten(nestedArray)); // 输出: [1, 2, 3, 4]
使用 reduce 实现分组统计
根据对象的属性分组,统计每组数量。示例按年龄分组:
const people = [
{ name: 'Alice', age: 21 },
{ name: 'Bob', age: 21 },
{ name: 'Charlie', age: 22 }
];
const groupByAge = people.reduce((acc, person) => {
const key = person.age;
acc[key] = (acc[key] || 0) + 1;
return acc;
}, {});
console.log(groupByAge); // 输出: {21: 2, 22: 1}
使用 reduce 实现数组去重
通过检查元素是否已存在于累加器中,实现数组去重:
const duplicates = [1, 2, 2, 3, 4, 4];
const unique = duplicates.reduce((acc, item) =>
acc.includes(item) ? acc : [...acc, item], []);
console.log(unique); // 输出: [1, 2, 3, 4]
使用 reduce 实现对象属性转换
将对象数组转换为以 id 为键的新对象:

const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' }
];
const usersById = users.reduce((acc, user) => {
acc[user.id] = user;
return acc;
}, {});
console.log(usersById);
// 输出: {1: {id: 1, name: 'Alice'}, 2: {id: 2, name: 'Bob'}}
注意事项
- 始终指定
reduce的初始值,避免空数组导致错误。 - 复杂操作时,确保回调函数纯函数化,避免副作用。
- 性能敏感场景需测试
reduce与其他方法(如循环)的差异。






