Comparer des objects dans Angular

Est-il possible de faire une comparaison “profonde” de deux objects dans Angular? Ce que je voudrais faire, c’est comparer chaque paire clé / valeur. Par exemple:

Objet 1

{ key1: "value1", key2: "value2", key3: "value3" } 

Objet 2

 { key1: "value1", key2: "newvalue", key3: "value3" } 

Ce dont j’ai besoin, c’est que la comparaison échoue car une seule paire clé / valeur est différente. En d’autres termes, TOUTES les paires clé / valeur doivent correspondre exactement ou sinon échec. Est-ce quelque chose de déjà intégré dans Angular? Je suis sûr que je pourrais écrire mon propre service si j’en avais vraiment besoin, mais j’espérais qu’il était déjà intégré. Similaire à angular.equals.

Pour comparer deux objects, vous pouvez utiliser:

angular.equals(obj1, obj2)

Il fait une comparaison profonde et ne dépend pas de l’ordre des touches Voir AngularJS DOCS et une petite démo

 var obj1 = { key1: "value1", key2: "value2", key3: {a: "aa", b: "bb"} } var obj2 = { key2: "value2", key1: "value1", key3: {a: "aa", b: "bb"} } angular.equals(obj1, obj2) //< --- would return true 

En supposant que l’ordre est le même dans les deux objects, il suffit de les ssortingngify tous les deux et de comparer!

 JSON.ssortingngify(obj1) == JSON.ssortingngify(obj2); 

Peu tard sur ce fil. angular.equals vérifie en profondeur, mais est-ce que quelqu’un sait pourquoi son comportement se comporte différemment si l’un des membres contient “$” dans le préfixe?

Vous pouvez essayer cette démo avec l’entrée suivante

 var obj3 = {} obj3.a= "b"; obj3.b={}; obj3.b.$c =true; var obj4 = {} obj4.a= "b"; obj4.b={}; obj4.b.$c =true; angular.equals(obj3,obj4); 

Je sais que c’est une réponse tardive, mais j’ai juste perdu environ une demi-heure pour la cause du débogage, ça pourrait faire gagner du temps à quelqu’un.

BE MINDFUL, Si vous utilisez angular.equals() sur des objects qui ont une propriété obj.$something angular.equals() le nom de la propriété commence par $), ces propriétés seront ignorées en comparaison.

Exemple:

 var obj1 = { $key0: "A", key1: "value1", key2: "value2", key3: {a: "aa", b: "bb"} } var obj2 = { $key0: "B" key2: "value2", key1: "value1", key3: {a: "aa", b: "bb"} } angular.equals(obj1, obj2) //< --- would return TRUE (despite it's not true)