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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。