1

Verwenden von underscore.js Ich versuche, zwei Objekte miteinander zu vergleichen, und wenn sie die gleichen sind, möchte ich true zurückgeben. Um dies zu erreichen, verwende ich _.isEqual().Vergleichen von zwei Objekten mit undefinierten Werten mit underscore.js

var a = {0: "2", 1: "11", 2: "1"} 
var b = {0: "2", 1: "11", 2: "1"} 
_.isEqual(a, b) // returns true 

Das funktioniert wie erwartet. Das Problem, auf das ich stoße, ist, wenn ich möglicherweise nicht alle Daten von einem der Objekte zu einer bestimmten Zeit habe. Lassen Sie uns dieses Beispiel verwenden:

var a = {0: "2", 1: undefined, 2: undefined} 
var b = {0: "2", 1: "11", 2: "1"} 
_.isEqual(a, b) // returns false 

ich einen Weg möchte (natürlich mit ._isEqual nicht) für das im Vergleich wahr wenn einige der Werte zurückgeben nicht definiert sind. Irgendwelche Ideen?

+0

Also '_.isAlmostEqual()'? Wenn Sie nur einfache, nicht geschachtelte Objekte wie die gezeigten verwenden, können Sie Ihre eigene Vergleichsfunktion mit nur etwa vier Zeilen Code schreiben. Wenn Sie verschachtelte Objekte zulassen möchten, können Sie sicher eine der vorhandenen Lösungen (einschließlich Underscore) verwenden und diese ändern, um nicht definierte Eigenschaften zu ignorieren. – nnnnnn

+0

Ich glaube nicht, dass das eine Unterstreichungsmethode ist ... haha ​​ –

Antwort

2

Hier ist eine Lösung, die erste ausarbeitet, welche gemeinsamen Schlüssel haben Werte definiert und verwendet dann _.isEqual den Vergleich zu machen:

var a = {0: "2", 1: undefined, 2: undefined} 
var b = {0: "2", 1: "11", 2: "1"} 

// helper predicate that returns true if the value passed to it is undefined 
var notUndefined = _.negate(_.isUndefined); 

// find the common keys that have defined values 
var keys = _.intersection(_.keys(_.pick(a,notUndefined)), _.keys(_.pick(b,notUndefined))) 

// compare only the common keys 
var result = _.isEqual(_.pick(a, keys), _.pick(b, keys)); 

NB Dies funktioniert nur, wenn Ihre Objekte primitive Typen enthalten (keine verschachtelten Objekten oder Arrays)

+0

Das funktioniert! Vielen Dank für die Hilfe! –

Verwandte Themen