constcountBy=(arr,fn)=>arr.map(typeoffn==='function'?fn:val=>val[fn]).reduce((acc,val,i)=>{acc[val]=(acc[val]||0)+1;returnacc;},{});countBy([6.1,4.2,6.3],Math.floor);//{4:1,6:2}countBy(['one','two','three'],'length');//{3:2,5:1}我的疑问是map里面是怎么运行,arr.map()主要是这个三元表达式结果是应该是进入fn,而不是后面的reduce求大佬着重解释下这个
2 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
constcountBy=(arr,fn)=>{//判断fn是否为函数,如果是函数tempFn=fn,如果不是函数tempFn=val=>val[fn]consttempFn=typeoffn==='function'?fn:val=>val[fn]//consttempFn=typeoffn==='function'?fn:(val=>val[fn])consttempArr=arr.map(tempFn)//遍历tempArr统计相同的元素个数returntempArr.reduce((acc,val,i)=>{acc[val]=(acc[val]||0)+1;returnacc;},{});}countBy([6.1,4.2,6.3],Math.floor);//tempFn=Math.floor//tempArr=arr.map(tempFn)//tempArr=[6,4,6]//使用reduce统计相同元素个数{6:2,4:1}countBy(['one','two','three'],'length');//tempFn=val=>val['length']//tempArr=arr.map(tempFn)//tempArr=[3,3,5]//使用reduce统计相同元素个数{3:2,5:1}
森栏
TA贡献1810条经验 获得超5个赞
array.map接收一个函数作为参数,返回值为一个新数组,新数组里面的每一项是原array经过函数处理后的返回值。map里面,fn是函数的话就是fn(array[i]),不是函数就返回array[i].length
添加回答
举报
0/150
提交
取消