2016-01-21 34 views
2

我有一個javascript對象數組。這裏是一個例子:如何在多個鍵上的javascript對象列表中找到唯一值?

[{'first': 'Mary', 'last':'Smith', 'task':'managing'}, 
{'first': 'Mary', 'last':'Smith', 'task':'research'}, 
{'first': 'Henry', 'last':'Ford', 'task':'assembling'}, 
{'first':'Henry', 'last':'Winkler', 'task':'acting;}] 

我想找到在第一個和最後一個名字不同的數組中的所有元素。我正在尋找的輸出格式爲:

[{'first': 'Mary', 'last':'Smith'}, 
{'first': 'Henry', 'last':'Ford'}, 
{'first': 'Henry', 'last':'Winkler'}] 

我該如何在JavaScript中執行此操作?

+0

不錯的問題,你有沒有嘗試過目前爲止或想過如何攻擊它的任何想法? –

+0

謝謝。一段時間摸索,閱讀文檔(lodash,下劃線,純JS等)不果後,我試圖通過初始陣列循環,檢查,看看是否新的數組中已經存在與第一和最後一個值對象,如果不是將新元素推送到新數組中,但我不確定如何查看數組中是否存在具有多個鍵的對象。 – mgig

回答

2

我會用這個Map

var m = new Map(); 
arr.forEach(function(obj){ 
    var name = obj.first + ' ' + obj.last; 
    if(!m.has(name)){ 
     m.set(name, { first : obj.first, last : obj.last}); 
    } 
}); 
var uniques = Array.from(m.values()); 
+0

聰明!我沒有想到將感興趣的鍵的所有值轉換成一個大字符串來搜索。這工作! – mgig

1

這將是推出新的ES6的好時機設定

var s = new Set(); 
arr.forEach(a => s.add({'first':a.first, 'last': a.last})) 
var myArr = Array.from(s); 
0

@Minusfour你只是在我前面。我有同樣的解決方案。

array.forEach(function (arrayItem) 
{ 
    if(hashMap[arrayItem.first + arrayItem.last] == 0){ 
    hashMap[arrayItem.first + arrayItem.last] = 1; 
    finalArray.push(arrayItem); 
    } 
}); 
相關問題