js reduce实现
使用 reduce 实现数组求和
reduce 方法可以对数组中的每个元素执行一个回调函数,最终返回一个累加结果。以下是求和的示例代码:

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0);
console.log(sum); // 输出: 15
accumulator是累加器,初始值为0(通过第二个参数指定)。currentValue是当前遍历的数组元素。
使用 reduce 实现数组去重
通过 reduce 可以轻松实现数组去重,利用对象的键唯一性:

const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = array.reduce((acc, current) => {
if (!acc.includes(current)) {
acc.push(current);
}
return acc;
}, []);
console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5]
- 初始值为空数组
[],每次检查当前元素是否已存在于累加器中。
使用 reduce 实现对象属性分组
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);
- 输出结果按
age分组,例如{ 21: [{...}, {...}], 22: [{...}] }。
使用 reduce 实现扁平化数组
reduce 可以将多维数组扁平化为一维数组:
const nestedArray = [[1, 2], [3, 4], [5]];
const flatArray = nestedArray.reduce((acc, current) => {
return acc.concat(current);
}, []);
console.log(flatArray); // 输出: [1, 2, 3, 4, 5]
- 初始值为空数组
[],通过concat合并子数组。
注意事项
- 初始值:如果未提供初始值,
reduce会以数组的第一个元素作为初始值,可能导致空数组报错。 - 性能:对于复杂操作,
reduce可能不如原生方法(如filter、map)直观,需权衡可读性。 - 链式调用:
reduce可以与其他数组方法(如filter)结合使用,实现更复杂的逻辑。






