2017-09-03 25 views
1

雖然下面的代碼:組對象的JSX

var setA = new Set(); 
    var e = {}; 
e['id'] = '123445'; 
e['name'] = 'joe doe' 
setA.add(e); 

console.log(setA); 
var f = {}; 
f['id'] = '123445'; 
f['name'] = 'joe doe' 
setA.add(f);   

console.log(setA); 

我拿到那組A = {E,F}而不是僅僅{E}。有沒有辦法避免這種情況?我的意思是,我希望setA在試圖添加f後可能只是{e}。任何特殊的參數添加?

+0

我認爲這將翻譯成JavaScript中的普通集合。如果是這樣的話,那麼不。數值通過身份進行比較。 'e'和'f'是兩個不同的對象。你必須編寫你自己的集合實現。 –

回答

1

就像Felix Kling提到的那樣,如果你的集合中的元素是基元,那麼它們的值將通過值進行比較,但如果它們是對象,則通過引用進行比較。如果你希望對象的屬性值進行深度比較,你必須創建你自己的實現,或者可能使用Map(其中鍵將是你的對象屬性的低碰撞率散列,並且值會成爲你的對象),如果你的要求不是太嚴格。

您也可以嘗試immutable-js,其中集合中的元素深入地與您進行比較。