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 数组函数。