Maison >interface Web >js tutoriel >Comment comparer des tableaux et des objets pour l'égalité en JavaScript ?

Comment comparer des tableaux et des objets pour l'égalité en JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-23 18:30:10843parcourir

How Do I Compare Arrays and Objects for Equality in JavaScript?

Comparaison des tableaux pour l'égalité en JavaScript

Identifier l'égalité des tableaux en JavaScript peut être une tâche difficile. L'opérateur de comparaison typique, ==, ne suffira pas dans ce scénario. Au lieu de cela, nous plongeons dans le domaine de la comparaison d'objets, qui nécessite une approche plus nuancée.

Comparaison de tableaux à l'aide d'une boucle

La méthode simple pour comparer des tableaux consiste à parcourir leurs éléments et à vérifier leur égalité. Voici comment procéder :

Array.prototype.equals = function (array) {
  if (!array) return false;
  if (this === array) return true;
  if (this.length !== array.length) return false;

  for (let i = 0, l = this.length; i < l; i++) {
    if (this[i] instanceof Array && array[i] instanceof Array) {
      if (!this[i].equals(array[i])) return false;
    } else if (this[i] !== array[i]) return false;
  }
  return true;
};

Comparer des objets

Les objets présentent un défi unique lors de la comparaison. Deux instances d'objet, même avec des propriétés identiques, ne seront jamais considérées comme égales en raison de leurs instances de classe distinctes. Cependant, si l'accent est uniquement mis sur la comparaison de données, cela est toujours possible :

Object.prototype.equals = function (object2) {
  for (const propName in this) {
    if (this.hasOwnProperty(propName) !== object2.hasOwnProperty(propName)) return false;
    if (typeof this[propName] !== typeof object2[propName]) return false;
  }

  for (const propName in object2) {
    if (this.hasOwnProperty(propName) !== object2.hasOwnProperty(propName)) return false;
    if (typeof this[propName] !== typeof object2[propName]) return false;
    if (!this.hasOwnProperty(propName)) continue;

    if (this[propName] instanceof Array && object2[propName] instanceof Array) {
      if (!this[propName].equals(object2[propName])) return false;
    } else if (this[propName] instanceof Object && object2[propName] instanceof Object) {
      if (!this[propName].equals(object2[propName])) return false;
    } else if (this[propName] !== object2[propName]) {
      return false;
    }
  }

  return true;
};

Tableaux imbriqués

Pour les tableaux imbriqués, les fonctions de Samy Bencherif fournissent une méthode efficace pour rechercher et comparer des objets spécifiques. dans des tableaux multidimensionnels : https://jsfiddle.net/SamyBencherif/8352y6yw/.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn