Comparer deux objets en JavaScript

Bonjour,

Je voudrais savoir comment je peux comparer deux objets en JavaScript?

Par exemple:

var person1 = {name : "alex", age: "22"};
var person2 = {name : "alex", org: "22"};
var res = person1 == person2;
alert(res); // retourne false

La méthode suivante fonctionne pour moi, mais est-elle la seule solution possible ?

var res = Object.toJSON(person1) == Object.toJSON(person2);
alert(res); // retourne true

L’opérateur d’égalité par défaut en JavaScript pour les objets donne un résultat true lorsqu’ils font référence au même emplacement en mémoire.

var a = {};
var b = {};
var c = a;

a === b; // => false
a === c; // => true

Si vous avez besoin d’un opérateur d’égalité différent, vous devrez ajouter une méthode equals(other), ou quelque chose comme ça à vos classes et les spécificités de votre problème détermineront ce que cela signifie exactement.

Voici un exemple :

function Person(name, age) {
  this.name= name;
  this.age= age;
  this.equals = function(other) {
     return other.name == this.name && other.age == this.age;
  };
}

var p1 = new Person("Alex", 22);
var p2 = new Person("Bob", 30);

p1.equals(p2); // => false
p2.equals(new Person("Bob", 30)); // => true
1 « J'aime »

Pour ceux qui utilisent Node, il existe une méthode pratique appelée isDeepStrictEqual dans la bibliothèque nativeutil qui permet de comparer deux objets.

const util = require('util');

const obj1 = {
  str: "abc",
  arr: [1, 2]
};

const obj2 = {
  str: "abc",
  arr: [1, 2]
};


obj1 == obj2 // false
util.isDeepStrictEqual(obj1, obj2) // true