我的代码:
const countBy = (arr, fn) => arr.map(val => (typeof fn === 'function' ? fn(val) : val[fn]))
高手的代码:
const countBy = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn])
测试代码:
console.log(countBy([1, 2, 3, 4, 5, 6], a => a % 3))
console.log(countBy([6.8, 4.2, 6.1], Math.floor))
console.log(countBy(['one', 'two', 'three'], 'length'))
发现居然是等效的!那高手的typeof fn === 'function' ? fn : val => val[fn] 这句怎么理解?如果fn是函数,val[fn]有意义吗?箭头函数前面不传入val,箭头后面居然也能用val!
他这是把你里面的判断给提到外面来了
map接收一个函数 用三目先判断fn的类型
是函数就可以直接用,参数是默认传入的
不是函数就包裹一层