2016-08-12 40 views
3

有我的例子數組:我如何跳過相同的價值觀,並得到數組長度

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

簡單person.length給我我數組的長度,但我需要合併值時,年齡是一樣的。所以如果兩個人有相同的年齡回報12。對不起我的英文不好,我可以犯錯。

回答

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);

+1

工作好謝謝你! – ReasonPlay

+0

@ReasonPlay:很高興幫助你:) –

+0

你的更新版本似乎不起作用 – ReasonPlay

2

您可以使用支持groupBy下劃線或類似的庫:

_.size(_.groupBy(person, "age")) 
+0

我不想使用額外的庫,但感謝您的幫助。 – ReasonPlay

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