JS数组reduce()方法原理及使用技巧解析
1、语法
arr.reduce(callback,[initialValue])
reduce为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用reduce的数组。
callback(执行数组中每个值的函数,包含四个参数)
1、previousValue(上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue(数组中当前被处理的元素)
3、index(当前元素在数组中的索引)
4、array(调用reduce的数组)
initialValue(作为第一次调用callback的第一个参数。)如果没有提供initialValue,reduce会从索引1的地方开始执行callback方法,跳过第一个索引。如果提供initialValue,从索引0开始。
2、reduce的简单用法
vararr=[1,2,3,4]; varsum=arr.reduce((x,y)=>x+y) varmul=arr.reduce((x,y)=>x*y) console.log(sum);//求和,10 console.log(mul);//求乘积,24
1)计算数组中每个元素出现的次数
letnames=['Alice','Bob','Tiff','Bruce','Alice'];
letnameNum=names.reduce((pre,cur)=>{
if(curinpre){
pre[cur]++
}else{
pre[cur]=1
}
returnpre
},{})
console.log(nameNum);//{Alice:2,Bob:1,Tiff:1,Bruce:1}
2)数组去重
letarr=[1,2,3,4,4,1]
letnewArr=arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
returnpre.concat(cur)
}else{
returnpre
}
},[])
console.log(newArr);//[1,2,3,4]
3)将二维数组转化为一维
letarr=[[0,1],[2,3],[4,5]]
letnewArr=arr.reduce((pre,cur)=>{
returnpre.concat(cur)
},[])
console.log(newArr);//[0,1,2,3,4,5]
4)将多维数组转化为一维
letarr=[[0,1],[2,3],[4,[5,6,7]]]
constnewArr=function(arr){
returnarr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr));//[0,1,2,3,4,5,6,7]
5)对象里的属性求和
varresult=[
{
subject:'math',
score:10
},
{
subject:'chinese',
score:20
},
{
subject:'english',
score:30
}
];
varsum=result.reduce(function(prev,cur){
returncur.score+prev;
},0);
console.log(sum)//60
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。