Der Objektvergleich in JavaScript ist täuschend komplex. Während der Vergleich primitiver Werte wie Zahlen und Zeichenfolgen unkompliziert ist, kann der Vergleich von Objekten zu unerwarteten Ergebnissen führen. Lassen Sie uns verschiedene Ansätze zum Objektvergleich untersuchen und eine robuste Lösung zum Erkennen von Änderungen zwischen Objekten entwickeln.
Wenn Entwickler zum ersten Mal auf Objektvergleiche in JavaScript stoßen, versuchen sie oft so etwas:
const user1 = { name: "John", age: 30 }; const user2 = { name: "John", age: 30 }; console.log(user1 === user2); // false
Überraschenderweise gibt dies „false“ zurück, obwohl beide Objekte identischen Inhalt haben. Dies liegt daran, dass JavaScript Objektreferenzen vergleicht, nicht deren Werte. Beide Objekte verweisen auf unterschiedliche Speicherorte.
Eine schnelle Möglichkeit, Objekte zu vergleichen, ist die Verwendung von JSON.stringify:
const areEqual = (obj1, obj2) => JSON.stringify(obj1) === JSON.stringify(obj2); console.log(areEqual(user1, user2)); // true
Dies funktioniert zwar in einfachen Fällen, weist jedoch Einschränkungen auf:
Lassen Sie uns eine ausgefeiltere Lösung erstellen, die nicht nur Unterschiede erkennt, sondern uns auch sagt, was sich geändert hat:
function getObjectDiff(original, current) { const changes = {}; // Check current object's properties for (const [key, value] of Object.entries(current)) { if (!(key in original)) { changes[key] = { oldValue: undefined, newValue: value }; continue; } const originalValue = original[key]; const currentValue = value; // Handle different types of comparisons if ( originalValue !== currentValue && String(originalValue) !== String(currentValue) && JSON.stringify(originalValue) !== JSON.stringify(currentValue) ) { changes[key] = { oldValue: originalValue, newValue: currentValue }; } } // Check for removed properties for (const key of Object.keys(original)) { if (!(key in current)) { changes[key] = { oldValue: original[key], newValue: undefined }; } } return Object.keys(changes).length === 0 ? null : changes; }
Diese Implementierung:
Diese Art des Objektvergleichs ist besonders nützlich für:
const originalForm = { name: "John", email: "john@example.com" }; const currentForm = { name: "John", email: "john.doe@example.com" }; console.log(getObjectDiff(originalForm, currentForm)); // Output: { email: { oldValue: "john@example.com", newValue: "john.doe@example.com" } }
PS: Hier ist ein Github-Gist für eine einfache Funktion zum Vergleichen und Ermitteln der Differenz zwischen zwei Objekten:
Das obige ist der detaillierte Inhalt vonWie man zwei Objekte vergleicht (vergleicht).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!