Ich benutze die lodash isEqual
Funktion für einen tiefen Vergleich von JavaScript-Objekten. Es erfordert Objekte die gleichen Prototypen haben, wie gleich, wie die folgenden Sitzung mit dem Knoten REPL zeigt zählen:Js tiefe Gleichheit ohne Rücksicht auf Prototypen überprüfen (vorzugsweise in lodash)
> const isEqual = require('lodash').isEqual
undefined
> isEqual({a:3},{a:3})
true
> class Foo { constructor(x) {this.a = x} }
[Function: Foo]
> isEqual(new Foo(3), new Foo(3))
true
> isEqual({a:3}, new Foo(3))
false
Gibt es eine einfache Art und Weise tief Vergleich ohne Berücksichtigung Prototypen zu tun? Es sollte immer noch einen speziellen Vergleich für Daten machen; Ich will nur, in den Fällen, wo lodash einen rekursiven Vergleich machen würde, dass es egal ist, ob sich Prototypen unterscheiden. Natürlich konnte ich es selbst programmieren, aber ich benutzte lodash, um so etwas nicht machen zu müssen. Ich dachte auch daran zu tun
isEqual(JSON.parse(JSON.stringify(obj1)), JSON.parse(JSON.stringify(obj2)))
Vielleicht ist es in Ordnung, aber es scheint brutto.
Sie nur verwenden können, 'JSON.stringify ({a: 3}) === JSON.stringify (new Foo (3)) 'im letzten Beispiel; – user3335966
Das funktioniert nicht. Die meisten Browser geben unterschiedliche Ergebnisse für 'JSON.stringify ({a: 1, b: 2})' und 'JSON.stringify ({b: 2, a: 1})' '. – gmr