如何跳过相同的值并获取数组长度

时间:2016-08-12 18:47:33

标签: javascript arrays

我有我的示例数组:

var person = [{
    firstName:"John",
    lastName:"Doe",
    age:46
},
{
    firstName:"Alexander",
    lastName:"Bru",
    age:46
},
{
    firstName:"Alex",
    lastName:"Bruce",
    age:26
}];

简单person.length给出了数组的长度,但是当年龄相同时我需要合并值。因此,如果两个人的年龄相同,则1没有2。抱歉我的英语不好,我可以犯错误。

4 个答案:

答案 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)