krislee94 / docs

日常文档整理
1 stars 0 forks source link

JS - reduce #25

Open krislee94 opened 4 years ago

krislee94 commented 4 years ago

JS数组reduce()方法

语法

arr.reduce(function(prev,cur,index,arr){
...
}, init);

arr.reduce(function(prev,cur,index,arr){
...
},);

arr表示将要原数组 prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值。

案例

数组求和,求乘积

var arr = [1,2,3,4];
var sum = arr.reduce((x,y)=>x+y);
var mul = arr.reduce((x,y)=>x*y);

console.log(sum);
console.log(mul);

计算数组中每个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

let nameNum = names.reduce( (pre,cur) => {
      if(cur in pre){
           pre[cur]++
      }else{
           pre[cur] = 1
      }
     return pre;
},{})

console.log(nameNum);

数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);// [1, 2, 3, 4]

将二维数组转化为一维

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
    return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]

对象里的属性求和

var result = [
    {
        subject: 'math',
        score: 10
    },
    {
        subject: 'chinese',
        score: 20
    },
    {
        subject: 'english',
        score: 30
    }
];

var sum = result.reduce(function(prev, cur) {
    return cur.score + prev;
}, 0);
console.log(sum) //60