封面

简介

数组、统计、遍历

根据指定的方法或者参数对数组中的项目进行统计。

// 该源码来自于 https://30secondsofcode.org
const countBy = (arr, fn) =>
  arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val) => {
    acc[val] = (acc[val] || 0) + 1;
    return acc;
  }, {});

代码分析

函数通过 Array.prototype.map 来对数据进行清洗,其中利用到 typeof 来判断是否为函数,否则使用 (val) => val[fn] 来读取属性,这个函数在编程中用到的频率挺高的。最后使用 reduce 来对数据进行归集,并返回统计好的数据。

使用场景

统计学生成绩的分布可以传入score属性,函数则会返回由成绩组成的统计对象。统计用户花费区间可以传入一个区间判断函数来获得对应的统计对象。

const students = [
    { name: 'xiaoer', score: 80 },
    { name: 'xiaosi', score: 90 },
    { name: 'menty', score: 50 },
]

const scoreStat = countBy(students, 'score')

const users = [
    { name: 'xiaoer', cost: 17000 },
    { name: 'xiaosi', cost: 8000 },
    { name: 'menty', cost: 3000 },
]

const costStat = countBy(users, i => {
    return i.cost > 10000
        ? 'high'
        : (i.cost > 5000 ? 'mid' : 'low')
})

相似代码

判断一个数组中某个数据项出现的次数。

// 该源码来自于 https://30secondsofcode.org
const countOccurrences = (arr, val) => arr.reduce((a, v) => (v === val ? a + 1 : a), 0)

一起成长

在困惑的城市里总少不了并肩同行的 伙伴 让我们一起成长。

  • 如果您想让更多人看到文章可以点个 点赞
  • 如果您想激励小二可以到 Github 给个 小星星
  • 如果您想与小二更多交流添加微信 m353839115

微信公众号

本文原稿来自 PushMeTop


书籍推荐