Maison > interface Web > js tutoriel > Comment comparer efficacement des tableaux et des objets en JavaScript ?

Comment comparer efficacement des tableaux et des objets en JavaScript ?

Mary-Kate Olsen
Libérer: 2024-12-30 22:11:17
original
273 Les gens l'ont consulté

How to Efficiently Compare Arrays and Objects in JavaScript?

Comparer efficacement des tableaux en JavaScript

Introduction

Comparer des tableaux en JavaScript peut être délicat. L'opérateur de comparaison (==) ne fonctionne pas comme prévu et la conversion de tableaux en JSON à des fins de comparaison peut s'avérer inefficace. Voici un guide complet pour comparer efficacement les tableaux :

Comparaison des tableaux

Pour effectuer une comparaison efficace des tableaux, suivez ces étapes :

1 . Méthode Equals personnalisée :

Définissez une méthode personnalisée sur le Array.prototype appelée Equals. Cette méthode comparera de manière récursive chaque élément des tableaux.

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; i < this.length; 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;
};
Copier après la connexion

2. Utilisation :

Pour comparer deux tableaux à l'aide de la méthode égale, appelez-la simplement sur l'un d'eux comme :

[1, 2, [3, 4]].equals([1, 2, [3, 2]]) === false;
Copier après la connexion

Comparaison d'objets

Comparer partiellement des objets est possible, mais vous devez être conscient que deux instances d'objet ne seront jamais égales même si elles contiennent la même chose. données.

1. Méthode d'égalité personnalisée pour les objets :

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

  for (let propName in object2) {
    if (
      this.hasOwnProperty(propName) !==
      object2.hasOwnProperty(propName)
    ) {
      return false;
    } else 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;
};
Copier après la connexion

2. Utilisation :

({ a: 1, foo: "bar", numberOfTheBeast: 666 }).equals({
  a: 1,
  foo: "bar",
  numberOfTheBeast: 666,
}) === false;
Copier après la connexion

Tableaux imbriqués avec indexOf et contient

Pour les cas plus complexes impliquant des tableaux imbriqués, vous pouvez utiliser les fonctions indexOf et contient pour rechercher pour des objets spécifiques imbriqués tableaux.

Conclusion

En suivant ces techniques, vous pouvez comparer efficacement des tableaux et des objets en JavaScript, en éliminant les pièges courants et en vous permettant d'effectuer de telles comparaisons en toute confiance.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal