L'objet ES6 Set récemment introduit utilise un algorithme d'identité pour les comparaisons d'égalité, similaire à l'opérateur. Cette approche n'est pas bien adaptée pour comparer des objets, comme le démontre l'exemple suivant :
var set = new Set(); set.add({a:1}); set.add({a:1}); console.log([...set.values()]); // Array [ Object, Object ]
Deux objets avec des propriétés identiques sont considérés comme des éléments distincts au sein de l'ensemble car ils ne sont pas exactement le même objet. Cette limitation soulève la question de savoir comment personnaliser l'égalité pour les objets Set afin de faciliter les comparaisons approfondies d'objets.
Limitations actuelles et solutions proposées
À partir de maintenant, l'objet ES6 Set manque de méthodes intégrées pour personnaliser les comparaisons d’égalité. Pour résoudre ce problème, l'auteur suggère de créer un objet dérivé qui hérite de Set et remplace les méthodes .has(), .add() et .delete() pour effectuer des comparaisons approfondies d'objets. Cependant, cette approche est inefficace car elle n'utilise pas la fonctionnalité de l'objet Set sous-jacent.
L'article fait référence à une proposition en cours de développement qui vise à introduire des enregistrements et des tuples dans JavaScript. Ces structures de données immuables devraient mettre en œuvre une comparaison approfondie des valeurs, ce qui résoudrait efficacement le problème décrit. Cependant, cette proposition est encore en cours de développement et n'est pas encore entièrement mise en œuvre.
Autres considérations
Certaines stratégies alternatives pour la comparaison d'objets au sein des ensembles incluent :
Ces approches fournissent des solutions de contournement mais ne personnalisent pas directement le comportement d'égalité de l'objet Set.
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!