2017-07-19 11 views
3

我有一個對象數組,我試圖從中獲取獨特的元素。我試着用Set來獲得獨特的元素。它不適用於數組對象,但在字符串數組的情況下工作。使用設置找不到對象數組中的唯一元素不起作用

如何使用set來實現此目的?

let data =[{"name":"tagName2"},{"name":"tagName2"}]; 
console.log(data); //[ { name: 'tagName2' }, { name: 'tagName2' } ] 
console.log((new Set(data))); //Set { { name: 'tagName2' }, { name: 'tagName2' } } 
+3

這是兩個不同的**對象。只有當對象指向同一位置時,對象才相同。 – Tushar

+1

沒有可以重寫的接口來建立等價關係 - 現在它已經很簡單了。 – Emissary

+0

容易檢查:'({name:'tagName2'})==({name:'tagName2'})'產生'false'。 – 9000

回答

2

可以先篩選與唯一對象的數組,然後通過它來設置,如下圖所示:

let data =[{"name":"tagName2"},{"name":"tagName2"}]; 

uniqueData=removeDuplicates(data, "name"); 

console.log((new Set(uniqueData))); //Set {{ name: 'tagName2' }} 

function removeDuplicates(data, param){ 
    return data.filter(function(item, pos, array){ 
     return array.map(function(mapItem){ return mapItem[param]; }).indexOf(item[param]) === pos; 
    }) 
} 
2

docs

設定的對象,您可以存儲唯一值任何類型,無論是 原始值或對象引用

正如@Tushar指出的那樣,這兩個對象是不同的。 Set濾除摺疊到同一對象的對象。

對於Set工作,你需要傳遞兩個對象refrencing同一個對象。檢查出this小提琴。

相關問題