2017-09-03 2 views
1

Bien que le code suivant:ensemble d'objets dans 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); 

Je reçois que Seta = {e, f} au lieu de simplement {e}. Y a-t-il un moyen d'éviter cela? Je veux dire, je voudrais que setA soit juste {e} après avoir essayé d'ajouter f? Un paramètre particulier pour ajouter?

+0

Je suppose que cela se traduit par des ensembles ordinaires en JavaScript. Si c'est le cas, alors non. Les valeurs sont comparées par identité. 'e' et' f' sont deux objets différents. Vous devez écrire votre propre mise en œuvre. –

Répondre

1

Comme Felix Kling l'a mentionné, les éléments de votre ensemble sont comparés par valeur s'ils sont des primitives, mais par référence s'il s'agit d'objets. Si vous voulez que les objets soient comparés en profondeur par les valeurs de leurs propriétés, vous devrez créer votre propre implémentation, ou éventuellement utiliser un Map (où les clés seraient un hachage à faible taux de collision des propriétés de votre objet, et les valeurs soyez vos objets) si vos exigences ne sont pas trop strictes.

Vous pouvez également essayer immutable-js, où les éléments d'un ensemble sont comparés en profondeur pour vous.