Ist es möglich, einen "tiefen" Vergleich zweier Objekte in Angular durchzuführen? Ich möchte jedes Schlüssel / Wert-Paar vergleichen. Zum Beispiel:
Objekt 1
{
key1: "value1",
key2: "value2",
key3: "value3"
}
Objekt 2
{
key1: "value1",
key2: "newvalue",
key3: "value3"
}
Was ich brauche, ist, dass der Vergleich fehlschlägt, da nur eines der Schlüssel / Wert-Paare unterschiedlich ist. Mit anderen Worten, ALLE Schlüssel / Wert-Paare müssen genau übereinstimmen, sonst ist ein Fehler aufgetreten. Ist das schon etwas in Angular eingebaut? Ich bin mir sicher, dass ich meinen eigenen Service schreiben könnte, wenn ich es wirklich brauchte, aber ich hatte gehofft, dass er bereits eingebaut ist. Ähnlich wie bei angle.equals.
angular.equals( { id: "12" }, { id: 12 } ) // is false
false
weil, basierend auf Identität ,"12"===12 // is false
. Probieren Sie es einfach aus.Angenommen, die Reihenfolge ist in beiden Objekten gleich, nur
stringify
beide und vergleichen!JSON.stringify(obj1) == JSON.stringify(obj2);
quelle
angular.toJson
würde auch die $$ hashKeys entfernenEtwas spät in diesem Thread. angular.equals prüft tief, aber weiß jemand, warum es sich anders verhält, wenn eines der Mitglieder das Präfix "$" enthält?
Sie können diese Demo mit folgenden Eingaben ausprobieren
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);
quelle
Ich weiß, dass es eine etwas späte Antwort ist, aber ich habe gerade eine halbe Stunde beim Debuggen verloren. Das könnte jemandem Zeit sparen.
ACHTUNG: Wenn Sie
angular.equals()
Objekte mit einer Eigenschaft verwendenobj.$something
(der Eigenschaftsname beginnt mit $), werden diese Eigenschaften im Vergleich ignoriert.Beispiel:
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)
quelle