关于一个分组统计的函数

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求大佬着重解释下这个
慕码人8056858
浏览 310回答 2
2回答

长风秋雁

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}

开心每一天1111

array.map接收一个函数作为参数,返回值为一个新数组,新数组里面的每一项是原array经过函数处理后的返回值。map里面,fn是函数的话就是fn(array[i]),不是函数就返回array[i].length
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript