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
}
可能是最简单但仍然如此。从下面的数据来看,我实际上想实现 _.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 }