为了账号安全,请及时绑定邮箱和手机立即绑定

关于一个分组统计的函数

关于一个分组统计的函数

慕码人8056858 2019-05-09 09:45:36
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贡献1757条经验 获得超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}
                            
查看完整回答
反对 回复 2019-05-09
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

array.map接收一个函数作为参数,返回值为一个新数组,新数组里面的每一项是原array经过函数处理后的返回值。map里面,fn是函数的话就是fn(array[i]),不是函数就返回array[i].length
                            
查看完整回答
反对 回复 2019-05-09
  • 2 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信