简介: reduce函数里面有两个 参数,第一个参数为一个回调函数,第二个参数为返回值的初始值;第一个回调函数里也有两个参数,第一个参数为返回值的初始值,第二个参数为数组的第一个元素,例如map函数的item;
1.最最常规用法:累加数组中的元素
const aa=[1,2,3,4,5]
const bb=aa.reduce((a,b)=>{
a=b+a;
return a
},0)
console.log(bb); //输出结果为15
上图reduce的初始值为0,使用回调函数的第一个参数a的值也为0;b的值为数组的第一个元素;对数组进行循环,a的值等于上一次循环a的值+当前循环b的值,最后返回a,这样就完成了累加;
注意:在回调函数中一定要把a的值retun出去!!!!
2.利用reduce对数组去重操作
const aa=['n','n','m','c','c','v','v']
const bb=aa.reduce((a,b)=>{
if(!a.includes(b)){ //includes() 方法用于检查数组中是否包含指定的元素,并返回一个布尔值。
a.push(b)
}
return a;
},[])
console.log(bb); //输出结果为['n', 'm', 'c', 'v']
很巧妙地利用了,初始返回值为一个空数组,如果数组中不包含该元素就添加进去
3.利用reduce判断一个数组中的元素在数组中出现了多少次
const nn=['n','n','n','m','m','k','k']
const mm= nn.reduce((a,b)=>{
if(!a[b]){
a[b]=1
}else{
a[b]++
}
return a
},{})
console.log(mm);//输出结果为{n: 3, m: 2, k: 2}
很巧妙地利用了初始值为一个空对象,如果第一次循环对象中没有这个值,就让这个对象的属性等于1,后面如果再次出现了,这个对象的属性就加一;
4.利用reuduce扁平化数组
const aa=[[1,2,3],[3,5,6],8,9,10,[8,9,10,[1,2,4,3]]]
const bb=(arry)=>{
const cc=arry.reduce((a,b)=>{
if(Array.isArray(b)===false){
a.push(b)
}
if(Array.isArray(b)===true){
a.push(...bb(b));
}
return a
},[])
return cc
}
console.log(bb(aa));