从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']