JavaScript reduce 方法
最后修改于 2025 年 4 月 4 日
在本文中,我们将展示如何使用 JavaScript 中的 reduce 方法转换数组。
数组规约
数组规约是将数组转换为单个值的过程。 reduce 方法对数组的每个元素执行一个 reducer 函数。 这会产生一个由元素计算得出的单个输出值。
reducer 函数接受四个参数:累加器、当前值、当前索引和源数组。 累加器累积回调的返回值。 它会记住迭代的值。
reduce 方法对于诸如求和数字、扁平化数组或分组对象之类的操作非常强大。它还可以为累加器获取一个初始值。如果省略,第一个数组元素将成为初始值。
基本 reduce 示例
以下示例演示了使用 reduce 方法对数字求和。
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, current) => {
return accumulator + current;
}, 0);
console.log(sum);
我们对数组中的所有数字求和。 累加器从 0 (初始值) 开始。 每次迭代都会将当前数字添加到累加器。 最终结果是所有数字的总和。
$ node main.js 15
查找最大值
reduce 方法可以找到数组中的最大值。
const values = [12, 34, 21, 54, 38];
const max = values.reduce((acc, current) => {
return Math.max(acc, current);
});
console.log(max);
我们在没有提供初始累加器值的情况下找到最大值。 第一个元素成为初始值。 每次迭代都会比较累加器和当前元素,并保留较高的值。
$ node main.js 54
扁平化数组
reduce 方法可以将嵌套数组扁平化为单个数组。
const nested = [[1, 2], [3, 4], [5, 6]];
const flat = nested.reduce((acc, current) => {
return acc.concat(current);
}, []);
console.log(flat);
我们从一个空数组作为累加器开始。 每次迭代将当前的嵌套数组连接到累加器。 结果是一个包含所有元素的单个扁平化数组。
$ node main.js [ 1, 2, 3, 4, 5, 6 ]
计算出现次数
reduce 方法可以计算数组中值的出现次数。
const fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'];
const count = fruits.reduce((acc, fruit) => {
acc[fruit] = (acc[fruit] || 0) + 1;
return acc;
}, {});
console.log(count);
我们从一个空对象作为累加器开始。 对于每个水果,我们增加其在累加器对象中的计数。 结果是一个对象,水果名称作为键,它们的计数作为值。
$ node main.js
{ apple: 3, banana: 2, orange: 1 }
按属性分组对象
reduce 方法可以按特定属性对对象进行分组。
const people = [
{ name: 'Alice', age: 21 },
{ name: 'Bob', age: 25 },
{ name: 'Charlie', age: 21 }
];
const grouped = people.reduce((acc, person) => {
const key = person.age;
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(person);
return acc;
}, {});
console.log(grouped);
我们按年龄对人进行分组。 累加器是一个空对象。 对于每个人,我们检查他们的年龄是否存在作为键。 如果没有,我们用一个空数组初始化它。 然后我们将这个人推入他们的年龄组数组中。
$ node main.js
{
'21': [ { name: 'Alice', age: 21 }, { name: 'Charlie', age: 21 } ],
'25': [ { name: 'Bob', age: 25 } ]
}
来源
在本文中,我们已经演示了如何使用 reduce() 方法来转换 JavaScript 中的数组。
作者
列出 所有 JS 数组函数。