countBy 使用下划线 - 选择计数避免重复

countBy using underscore - pick count avoiding duplicates

可能是最简单但仍然如此。从下面的数据来看,我实际上想实现 _.countBy 来获得响应,因为有 1 个来自城市 A,1 个来自城市 B。这里的问题是,第一条和第二条记录实际上指的是同一个人。因此,从逻辑上讲,有一个人来自 A 市。但 countBy 的结果是,根据现有记录,A 市有 2 人,B 市有 1 人。你能帮忙解决这个问题吗?

 var data=[{
      id:1,
      name:"xxx",
      city:"City A",
      skill:"Angular"
    },
    {
      id:2,
      name:"xxx",
      city:"City A",
      skill:"Node"
    },{
      id:3,
      name:"yyy",
      city:"City B",
      skill:"Angular"
    }];

您需要首先使用 _.uniq before passing it to _.countBy 确保每个用户都是唯一的。为确保值是唯一的,我刚刚创建了一个字符串,方法是将城市与带有竖线 (|) 分隔符的名称连接起来。

const unique = _.uniq(data, p => p.city + "|" + p.name)
const byCity = _.countBy(unique, p => p.city)

您可以使用 _.chain.

将两者合并成一行
_.chain(data).uniq(p => p.city + "|" + p.name).countBy(p => p.city).value()

两者都是 return 的结果:

{  
    City A: 1,
    City B: 1
}