28

我正在使用 _underscore.js 查找数组中的所有唯一项,但我不知道如何获得返回的唯一项的数量。

_PERSONARRAY = [{name:"tom",age:7}{name:"john",age:9}{name:"becky",age:2}{name:"sam",age:7}]

_UNIQUEAGEARRAY = _.chain(_PERSONARRAY).map(function(person) { return person.age }).uniq().value();

在这种情况下 _UNIQUEAGEEARRAY 将等于:

[7,9,2]

我真正需要返回的是:

[{uniqueAge:7,numberOfPeople:2}{uniqueAge:9,numberOfPeople:1}{uniqueAge:2,numberOfPeople:1}]

感谢帮助。另外,我假设 _underscore.js 很快就能做到这一点?如果它很愚蠢,请告诉我,因为我愿意接受其他解决方案。

4

4 回答 4

82

一个不错的解决方案是使用可选的迭代器函数来下划线的uniq函数:

let people = [
  {name: "Alice", age: 21}, 
  {name: "Bob", age: 34},
  {name: "Caroline", age: 21}
];
_.uniq(people, person => person.age);

文档:http ://underscorejs.org/#uniq

于 2013-12-08T02:37:53.363 回答
17

我认为您正在寻找以下countBy功能:

_UNIQUEAGEARRAY = _.countBy(_PERSONARRAY, "age");

它产生结果:

{"2":1,"7":2,"9":1}

JSFiddle 演示:http: //jsfiddle.net/4J2SX/

于 2013-10-09T01:10:00.550 回答
1

如果需要,您可以使用下划线的 groupBy(对于大型数据集可能不是一个好主意,因为它保留了所有分组项目的列表)

例子:

var d = _.groupBy(_PERSONARRAY, function(p){ 
    return p.age;
});

如果您想将其映射到您的确切格式,请尝试在 groupBy 之后进行映射:

var x = _.map(d, function(people, age) {   
    return {uniqueAge: age,  numberOfPeople: people.length};   
});

jsFiddle:http: //jsfiddle.net/jsgkC/2/

于 2013-10-09T01:19:05.410 回答
0

groupBy功能很有用。

_personsList = [{name:"anjo",age:5},{name:"george",age:3},{name:"jack",age:5}];
_uniqAgeList = _.groupBy(_personsList, "age");

会产生输出

{
    "3":[{"name":"george","age":3}],
    "5":[{"name":"anjo","age":5},{"name":"jack","age":5}]
}

jsfiddle:http: //jsfiddle.net/4J2SX/199/

于 2017-05-10T11:01:08.733 回答