Bei der Arbeit mit JavaScript ist es für die effektive Manipulation von Objekten und Arrays wichtig, den Unterschied zwischen flacher Kopie und tiefer Kopie zu verstehen. Sehen wir uns an, was diese Begriffe bedeuten und wie Sie die einzelnen Arten von Kopien in Ihrem Code implementieren.
Flache Kopie
Eine flache Kopie erstellt ein neues Objekt oder Array, das dieselben Werte wie das Original enthält. Wenn das Original jedoch verschachtelte Objekte oder Arrays enthält, kopiert die flache Kopie nur die Verweise auf diese verschachtelten Strukturen, nicht die Strukturen selbst. Das bedeutet, dass Änderungen an den verschachtelten Objekten oder Arrays in der kopierten Struktur auch Auswirkungen auf das Original haben.
Beispiele für Shallow-Copy-Methoden:
const original = { a: 1, b: { c: 2 } }; const shallowCopy = { ...original };
ShallowCopy ist hier ein neues Objekt, aber strictCopy.b verweist immer noch auf dasselbe Objekt wie original.b.
2.Object.assign()
const shallowCopy = Object.assign({}, original);
const originalArray = [1, 2, 3]; const shallowCopyArray = originalArray.slice();
Deep Copy
Eine tiefe Kopie erstellt ein neues Objekt oder Array, das ein vollständiger, unabhängiger Klon des Originals ist, einschließlich aller verschachtelten Objekte und Arrays. Änderungen an der tiefen Kopie wirken sich nicht auf das Original aus und umgekehrt.
Beispiele für Deep Copy-Methoden:
const original = { a: 1, b: { c: 2 } }; const deepCopy = JSON.parse(JSON.stringify(original));
Diese Methode serialisiert das Objekt in eine JSON-Zeichenfolge und analysiert es dann wieder in ein neues Objekt. Es verarbeitet jedoch keine Funktionen, undefinierten oder Zirkelverweise.
2.Rekursive Funktion
function deepCopy(obj) { if (obj === null || typeof obj !== 'object') return obj; const copy = Array.isArray(obj) ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { copy[key] = deepCopy(obj[key]); } } return copy; }
const deepCopy = structuredClone(original);
Wann jeweils zu verwenden ist
Flache Kopie: Geeignet für einfache Objekte oder Arrays ohne verschachtelte Strukturen. Es ist schneller und verbraucht weniger Speicher. Verwenden Sie es, wenn Sie eine schnelle Kopie benötigen, bei der Änderungen an verschachtelten Objekten sowohl im Original als auch in der Kopie widergespiegelt werden sollen.
Deep Copy: Notwendig für komplexe Objekte oder Arrays mit verschachtelten Strukturen. Dadurch wird sichergestellt, dass Änderungen an der Kopie keine Auswirkungen auf das Original haben. Verwenden Sie es, wenn Sie völlig unabhängige Klone benötigen.
Das Verständnis dieser Unterschiede hilft, Fehler zu vermeiden, die durch unbeabsichtigte gemeinsame Referenzen entstehen, und stellt die Datenintegrität in Ihren Anwendungen sicher
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3