Underscore.js在对象数组中找到唯一值;返回独特的物品及其数量

问题描述 投票:25回答:4

我使用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();

在这种情况下,_UNIQUEAGEARRAY将等于:

[7,9,2]

我实际需要返回的是:

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

感谢帮助。另外,我假设_underscore.js很快就这样做了?如果这是愚蠢的慢,告诉我因为我会接受其他解决方案。

javascript underscore.js unique
4个回答
16
投票

我想你正在寻找countBy功能:

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

它产生了结果:

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

JSぇdでも但是:z zxswい


75
投票

一个不错的解决方案是使用可选的迭代器函数来强调http://jsfiddle.net/4J2SX/函数:

uniq

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


1
投票

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

例:

http://underscorejs.org/#uniq

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

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

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


0
投票

http://jsfiddle.net/jsgkC/2/功能很有用。

groupBy

会产生输出

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

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

© www.soinside.com 2019 - 2024. All rights reserved.