语法
arr.reduce(callback, [initialValue])
含义
reduce
为数组中的每个元素依次执行callback
函数,不包括数组中被删除或从未被赋值的元素,callback(accumulator ,currentValue ,currentIndex ,array)
函数接收四个参数, initialValue
作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce
将报错。
参数
callback中的参数 | |
---|---|
accumulator | 累计器 |
currentValue | 当前值 |
currentIndex | 当前索引 |
array | 源数组 |
initialValue | 作为第一次调用 callback函数时的第一个参数的值。 |
应用
1. 数组求和
let total = [ 0, 1, 2, 3 ]
let result=total.reduce(( acc, cur ) => acc + cur,0);
console.log(result)
1. 计算数组中每个元素出现的次数
let names = ['James', 'Bob', 'Alice', 'Bob', 'John'];
let countedNames = names.reduce((acc, cur)=>{
if (cur in acc) {
acc[cur]++;
} else {
acc[cur] = 1;
}
return acc;
}, {
})
console.log(countedNames)
2. 二维数组转一维数组
let arr = [[1, 2], [3, 4], [5, 6]];
let flattened = arr.reduce((acc, cur)=>{
return acc.concat(cur);
}, [])
console.log(flattened)
3. 按属性对object分类
var people = [
{
name: 'Alice', age: 21 },
{
name: 'Max', age: 20 },
{
name: 'Jane', age: 20 }
];
function groupBy(objectArray, property) {
return objectArray.reduce(function (acc, obj) {
var key = obj[property];
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(obj);
return acc;
}, {
});
}
var groupedPeople = groupBy(people, 'age');
console.log(groupedPeople)