Dans ES6 (Harmony), le nouvel objet Set introduit l'égalité de référence pour ses éléments. Cependant, ce comportement n'est pas toujours adapté à une comparaison approfondie d'objets.
Considérez l'extrait de code suivant :
var set = new Set(); set.add({a:1}); set.add({a:1}); console.log([...set.values()]); // Array [ Object, Object ]
Comme vous pouvez voyez, même si les deux objets ont les mêmes propriétés et valeurs, ils sont considérés comme distincts en raison de l'égalité de référence.
Malheureusement, l'objet ES6 Set ne fournit pas de -in méthodes pour personnaliser les comparaisons d’égalité. L'étendre pour remplacer la logique de comparaison serait également un défi.
Bien que la comparaison personnalisée pour les objets Set ne soit pas directement prise en charge, vous pouvez envisager d'utiliser une structure ou une technique de données alternative :
1. Objets à valeur immuable :
L'article mentionné dans la réponse suggère d'utiliser des objets à valeur immuable, ce qui permettrait à l'ensemble d'utiliser une comparaison de valeurs approfondie. Cependant, ce n'est pas actuellement une norme en JavaScript.
2. Structure de données personnalisée avec comparaison approfondie :
Vous pouvez créer votre propre structure de données personnalisée qui hérite de Set et remplace les méthodes qui utilisent l'identité d'objet. Cependant, cela nécessiterait une réécriture complète de l'implémentation Set, ce qui ne serait pas efficace pour les grands ensembles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!