comment vérifier si deux objets sont égaux en javascript


Réponse 1:

Votre commentaire pose spécifiquement des questions sur Python, mais dans n'importe quel langage, la meilleure façon de tester l'égalité de deux objets est de tester chaque attribut.

si vous comparez les identifiants / adresses d'objet, le seul moment où deux choses seront égales est si les deux objets sont le même objet.

Si vos objets sont hachables et que les valeurs de hachage sont mises en cache, vous pouvez comparer les hachages, mais cela vous indiquera seulement que deux objets sont différents - si leurs valeurs de hachage sont les mêmes, ils peuvent toujours avoir des valeurs différentes.

La chose clé à retenir dans n'importe quelle langue est que vous n'aurez peut-être pas besoin de vérifier chaque attribut - cela dépend de votre définition d'égale pour ce type d'objet donné. Par exemple, disons que vous avez un groupe d'instances qui décrivent toutes des personnes, et que deux instances sont égales si elles concernent la même personne; et vous pouvez décider que tant que deux instances ont le même SSN (ou numéro d'identification d'employé ou similaire), ces deux objets font référence à la même personne. Dans ce cas, votre test d'égalité n'a besoin que de vérifier le SSN / ID d'employé, et ne vous inquiétez d'aucune autre atttibute.

En bref, vous vérifiez les attributs que vous devez vérifier pour prouver que deux instances sont égales


Réponse 2:

La bonne façon de procéder est d'implémenter la méthode __eq__ dans votre classe, ce qui vous permet de reprendre le contrôle total sur la façon dont l'égalité de votre objet est définie.

Et un exemple de ceci pourrait être le suivant, dans lequel nous disons que deux livres sont identiques s'ils ont le même nombre de pages (c'est un exemple idiot, mais cela montre que vous pouvez définir l'égalité de la manière que vous voulez).

livre de classe: def __init __ (soi, titre, pages): self.title = titre self.pages = pages def __eq __ (soi, autre): retourne self.pages == other.pagesbible = Livre ("La Sainte Bible", 500)quran = Livre ("Le Coran", 500)assertEqual (bible, coran)assertTrue (bible == coran)assertFalse (bible! = coran)

Toutes les trois affirmations seront vraies selon notre définition de l'égalité.


Réponse 3:

Pour toute classe que vous définissez, la méthode equals est héritée de la classe Objects. La méthode héritée vérifie par défaut si l'emplacement en mémoire est le même pour deux objets. Vous devez redéfinir cette méthode afin qu'elle définisse l'égalité de la manière dont vous souhaitez définir l'égalité (par exemple, si toutes les variables d'instance correspondent, alors les deux objets sont égaux, alors retournez true).

Vous devez également remplacer la méthode de hashcode si vous remplacez la méthode equals. En effet, la base de certaines structures de données (ensemble de hachage, par exemple) est que deux objets considérés comme égaux ont le même hashcode. Si cela ne tient pas, vous casserez la structure des données. Vous devez remplacer le hashcode afin qu'il renvoie un hachage basé sur les variables que vous utilisez pour définir l'égalité.


Réponse 4:

Dans votre définition d'objet, faites

def __eq __ (soi, autre): retourne soi .__ dict__ == autre .__ dict__Comparez les instances d'objet pour l'égalité par leurs attributs en Python

Réponse 5:

Je le réécris comme «défini le type d'enregistrement». En supposant que vous ayez posé la question de le faire en Java, la réponse est la suivante: remplacez l'opération equals si vous voulez tester l'égalité de valeur d'enregistrement. Le langage de programmation Java a une opération définie par le système == pour tester l'égalité de la valeur de référence / d'adresse.