从0开始学习reduce

reduce为数组的一个方法,处理一些数组去重,获取数组出现次数等非常好用,写法为:

arr.reduce((preV,cur,index,oldArr)=>{})

传参: 

  • preV:上次调用函数的返回值
  • cur:当前元素
  • index:当前元素索引
  • arr:被遍历的数组

他还可以设置一个初始迭代值,如下:[],就为第一次preV的初始值

arr.reduce((preV,cur,index,oldArr)=>{},[])

初级应用:求和和乘机

let arr = [1,2,3,4,5]
console.log(arr.reduce((a,b)=> a+b)) // 15
console.log(arr.reduce((a,b)=> a*b)) // 120

当我设置初始迭代值时:

let arr=[1,2,3,4]
let sum = arr.reduce((pre,cur,index)=> {
   console.log(pre,cur,index)
return pre + cur },5) console.log(arr,sum)

运行结果:可以这么看

  • 5    1    0
  • 6    2    1
  • 8    3    1
  • 11  4     3 

[1,2,3,4]     15

可以理解为  5+1 为6    6 +2  为8  这么看  最后11 + 4 为15  所以最后为15

高级应用:

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

let arr = ['name','age','short','long','name','name'];
let arrRsult = arr.reduce((pre,cur) => {
       console.log(pre,cur)
       if( cur in pre){
      pre[cur]++
    }else {
      pre[cur] = 1
    }
    return pre },{})
console.log(arrRsult);//{name:3,age:1,long:2,short:1}

可根据运行结果来看一下:
{} 'name'
{name:1} 'age'
{name:1,age:1} 'long'
{name:1,age:1,long:1} 'short'
{name:1,age:1,long:1,short:1} 'long'
{name:1,age:1,long:2,short:1} 'name'
{name:2,age:1,long:2,short:1} 'name'
 

 <2>去除数组中重复的元素

let arr = ['name','age','short','long','name','name'];
let arrResult = arr.reduce((pre,cur)=> {
     if(!pre.includes(cur)) {
          pre.push(cur) 
     }
     return pre;
},[])
console.log(arrResult);//[
'name','age','short','long']

 

posted @ 2022-08-09 18:14  黑白棋学弟  阅读(29)  评论(0编辑  收藏  举报