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

Tha*_*thr 26 javascript unique underscore.js

我使用_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();
Run Code Online (Sandbox Code Playgroud)

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

[7,9,2]
Run Code Online (Sandbox Code Playgroud)

我实际需要返回的是:

[{uniqueAge:7,numberOfPeople:2}{uniqueAge:9,numberOfPeople:1}{uniqueAge:2,numberOfPeople:1}]
Run Code Online (Sandbox Code Playgroud)

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

jak*_*ige 78

一个很好的解决方案是使用可选的迭代器函数来强调uniq函数

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

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


how*_*rad 16

我想你正在寻找这个countBy功能:

_UNIQUEAGEARRAY = _.countBy(_PERSONARRAY, "age");
Run Code Online (Sandbox Code Playgroud)

它产生了结果:

{"2":1,"7":2,"9":1}
Run Code Online (Sandbox Code Playgroud)

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

  • 然后你可以简单地通过map运行它来获得你想要的对象结构(在http://jsfiddle.net/4J2SX/2/更新) (5认同)