[JavaScript]JS中 reduce 的实际应用

语法

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)

在这里插入图片描述
更多内容:Array.prototype.reduce()

猜你喜欢

转载自blog.csdn.net/iChangebaobao/article/details/108973340