2019-04-12
描述
对数组元素依次传入指定函数后的返回值进行分类,并返回每种分类中的元素的个数。
提示
- 使用
Array.prototype.map()
返回数组中每一个元素的属性名或指定函数的返回值。 - 使用
Array.prototype.reduce()
创建一个对象,key 为分组类型,值为该类型的元素个数。
代码
const countBy = (arr, fn) =>
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
示例
- 对数组中的元素向下取整后获取每个整数的个数:
countBy([6.1, 4.2, 6.3], Math.floor); // {4: 1, 6: 2}
- 对数组中的元素按字符长度进行分类,返回每种长度的元素个数:
countBy(['one', 'two', 'three'], 'length'); // {3: 2, 5: 1}