我有我的示例数组:
var person = [{
firstName:"John",
lastName:"Doe",
age:46
},
{
firstName:"Alexander",
lastName:"Bru",
age:46
},
{
firstName:"Alex",
lastName:"Bruce",
age:26
}];
简单person.length
给出了数组的长度,但是当年龄相同时我需要合并值。因此,如果两个人的年龄相同,则1
没有2
。抱歉我的英语不好,我可以犯错误。
答案 0 :(得分:2)
您可以使用支持groupBy
的下划线或类似库:
_.size(_.groupBy(person, "age"))
答案 1 :(得分:2)
将 Array#forEach
方法与年龄的对象参考一起使用。
var person = [{
firstName: "John",
lastName: "Doe",
age: 46
}, {
firstName: "Alexander",
lastName: "Bru",
age: 46
}, {
firstName: "Alex",
lastName: "Bruce",
age: 26
}];
// object for storing reference to age
var obj = {},
res = 0;
// iterate and count
person.forEach(function(v) {
// check age already not defined
if (!obj[v.age]) {
// define the property
obj[v.age] = true;
// increment count
res++;
}
});
console.log(res);

答案 2 :(得分:0)
将数组向下过滤到只有那些具有相同年龄的第一个元素的数组find
产生元素本身的元素,然后取结果的长度:
array.filter(o1 => o1 === array.find(o2 => o2.age === o1.age)).length
另一个想法涉及使用一个名为uniqueCount
的小函数,它计算(排序)数组中唯一值的数量:
function uniqueCount(a) {
return a.reduce((cnt, elt, i) => a[i] === a[i-1] ? cnt : cnt + 1), 0);
}
现在,您可以创建一个包含所有年龄段的数组,并对其中的唯一元素进行计数:
uniqueCount(array.map(e => e.age).sort(numeric))
答案 3 :(得分:0)
如果您被允许,您可以将所有年龄添加到一个集合中并采用其大小。
const people = [{
firstName: "John",
lastName: "Doe",
age: 46
}, {
firstName: "Alexander",
lastName: "Bru",
age: 46
}, {
firstName: "Alex",
lastName: "Bruce",
age: 26
}];
const ages = new Set(people.map(person => person.age));
console.log(ages.size)