Javascript Underline.js在对象数组中查找唯一值;返回唯一项目及其计数
我使用_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(); 在这种情况下
_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”函数,因此我不知道从性能角度看,其中一个是否比另一个好那么多。您可以在此处看到带注释的源: