Javascript Underline.js在对象数组中查找唯一值;返回唯一项目及其计数

Javascript Underline.js在对象数组中查找唯一值;返回唯一项目及其计数,javascript,underscore.js,unique,Javascript,Underscore.js,Unique,我使用_underline.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(); 在这种情况下

我使用_underline.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}]

谢谢你的帮助。另外,我假设_underline.js在这方面做得很快??如果它很慢,请告诉我,因为我愿意接受其他解决方案。

我想您正在寻找
countBy
功能:

_UNIQUEAGEARRAY = _.countBy(_PERSONARRAY, "age");
let people = [
  {name: "Alice", age: 21}, 
  {name: "Bob", age: 34},
  {name: "Caroline", age: 21}
];
_.uniq(people, person => person.age);
它会产生以下结果:

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

JSFIDLE demo:

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

例如:

var d = _.groupBy(_PERSONARRAY, function(p){ 
    return p.age;
});
如果要将其映射到精确格式,请尝试在groupBy之后进行映射:

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

jsiddle:

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

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

文档:

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:

然后您只需在map中运行它,就可以将它放入您想要的对象结构中(更新时间),非常简单!谢谢大家@howard假设我有这个对象数组:[{couponid:500 locationid:10},{couponid:600 locationid:15},{couponid:500 locationid:10},{couponid:500 locationid:20}]使用您给出的解决方案,我得到了一个唯一优惠券id数组,每个唯一优惠券id都有计数;这是我经过反复研究后发现的最简洁的答案;现在,您能告诉我,对于每个唯一的couponid,我如何获得多少个唯一的位置ID吗?即在上面的couponid 500中有2个,couponid 600中有1个。我是否应该将此作为一个单独的问题发布?注意:groupBy、countBy、indexBy都在内部使用相同的“group”函数,因此我不知道从性能角度看,其中一个是否比另一个好那么多。您可以在此处看到带注释的源: