2017-09-03 26 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,其中集合中的元素深入地与您进行比较。