Detaillierte Erläuterung der Prinzipien des tiefen und flachen Klonens von JavaScript-Arrays und Nicht-Array-Objekten

Detaillierte Erläuterung der Prinzipien des tiefen und flachen Klonens von JavaScript-Arrays und Nicht-Array-Objekten

Was sind flaches und tiefes Klonen?

Flaches Klonen: Weisen Sie den im Stapel gespeicherten Wert direkt der entsprechenden Variablen zu. Wenn es sich um einen Basisdatentyp handelt, wird der entsprechende Wert direkt zugewiesen. Wenn es sich um einen Referenztyp handelt, wird die Adresse zugewiesen.
Tiefes Klonen: Weisen Sie Daten den entsprechenden Variablen zu, um neue Daten zu generieren, die in keinem Zusammenhang mit den Quelldaten stehen (die Datenadresse hat sich geändert). Das heißt, die Eigenschaften jeder Ebene des Objekts.
In JavaScript können grundlegende Datentypen mit dem Symbol "=" geklont werden, und Referenzdatentypen verwenden das Symbol "=" nur, um den Zeiger der Variablen zu ändern, ohne einen echten Klonvorgang durchzuführen.

1. Klonen Sie das Array

1.1 Oberflächliches Klonen

Verwenden Sie eine For-Schleife, um einen oberflächlichen Klon durchzuführen.

var arr1 = ['demo', 1, 2];
var arr2 = [];
// Oberflächlicher Klon des Arrays für (var i = 0; i < arr1.length; i++) {
    arr2[i] = arr1[i];
}
Konsole.log(arr2);
Konsole.log(arr1 == arr2);

Ausgabe:

Array(3)0: "Demo"1: 12: 2Länge: 3[[Prototyp]]: Array(0)
FALSCH

1.2 Tiefes Klonen

Verwenden Sie Rekursion für tiefes Klonen.

Funktion deepClone(o) {
	var Ergebnis = [];
	für (var i = 0; i < o.Länge; i++) {
		Ergebnis.push(deepClone(o[i]));
	}
	Ergebnis zurückgeben;
}

2. Klonen von Nicht-Array-Objekten

2.1 Oberflächliches Klonen

Verwenden Sie eine For-Schleife, um einen oberflächlichen Klon durchzuführen.

var obj1 = { a: 1, b: 2, c: 3, d: [4, 5, { e: 'demo' }] };
var obj2 = {};
// Oberflächlicher Klon des Objekts für (var i in obj1) {
    obj2[i] = obj1[i];
}
konsole.log(obj2);
console.log(obj1 == obj2);

Ausgabe:

{a: 1, b: 2, c: 3, d: Array(3)}
FALSCH

2.2 Tiefes Klonen

Verwenden Sie Rekursion für tiefes Klonen.

Funktion deepClone(o) {
	var Ergebnis = {};
	für (var i in o) {
		Ergebnis[i] = deepClone(o[i]);
	}
	Ergebnis zurückgeben;
}

3. Integrieren Sie die Deep-Clone-Funktion

var obj1 = { a: 1, b: 2, c: 3, d: [4, 5, { e: 'demo' }] };
var arr1 = ['demo', 1, 2];
// Tiefe Klonfunktion deepClone(o) {
    wenn (Array.isArray(o)) {
        // ist ein Array var result = [];
        für (var i = 0; i < o.Länge; i++) {
            Ergebnis.push(deepClone(o[i]));
        }
    } sonst wenn (Typ von o == 'Objekt') {
        // Kein Array, sondern ein Objekt var result = {};
        für (var i in o) {
            Ergebnis[i] = deepClone(o[i]);
        }
    } anders {
        // Basistypwert var result = o;
    }
    Ergebnis zurückgeben;
}
console.log(deepClone(arr1));
console.log(deepClone(obj1));

Damit ist dieser Artikel über die detaillierten Prinzipien des tiefen und flachen Klonens von JavaScript-Arrays und Nicht-Array-Objekten abgeschlossen. Weitere relevante Inhalte zu JavaScript-Arrays finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Unbekannte Verwendung von Object.entries in JavaScript
  • js Array fill() Füllmethode
  • Detaillierte Verwendung des JS-Arrays für jede Instanz
  • Detaillierte Diskussion mehrerer Methoden zur Deduplizierung von JavaScript-Arrays
  • Zusammenfassung der JS-Tipps zum Erstellen oder Füllen von Arrays beliebiger Länge
  • Detaillierte Erklärung der JavaScript-Array-Deduplizierung
  • js Array-Einträge () Holen Sie sich die Iterationsmethode

<<:  Detaillierte Erklärung zu MySQL und Springs Autocommit

>>:  Detailliertes Tutorial zur Installation von Tomcat8.5 in einer Centos8.2-Cloud-Serverumgebung

Artikel empfehlen

Verwendung des Linux-Telnet-Befehls

1. Einleitung Der Befehl Telnet dient zur Anmeldu...

Oberflächliches Webdesign

<br />Ich war schon immer der Meinung, dass ...

Verwenden Sie CSS, um einen 3D-Fotowandeffekt zu erstellen

Verwenden Sie CSS, um eine 3D-Fotowand zu erstell...

Fallstudie: Ajax responseText analysiert JSON-Daten

Lösen Sie das Problem, dass der vom Server nach d...

Vue implementiert Drag & Drop für mehrspaltiges Layout

In diesem Artikel wird der spezifische Code von V...

Der Button hat einen hässlichen grauen Rand. Wie kann ich ihn entfernen?

Ich habe den Dialog beim Schließen verwendet und e...

So generieren Sie eine Vue-Benutzeroberfläche per Drag & Drop

Inhaltsverzeichnis Vorwort 1. Technisches Prinzip...

Javascript-Betriebsmechanismus „Event Loop“

Inhaltsverzeichnis 1. Vier Konzepte 1. JavaScript...

Vue2.0 implementiert adaptive Auflösung

In diesem Artikel wird der spezifische Code von V...

So schreiben Sie schönen HTML-Code

So sieht schöner HTML-Code aus. So schreiben Sie ...

HTML-Subtag und Sup-Tag

Heute stelle ich zwei HTML-Tags vor, die ich nich...

Vue implementiert grafischen Überprüfungscode

In diesem Artikelbeispiel wird der spezifische Co...

Eine kurze Analyse des Zustandsverständnisses von React

Wie definiert man komplexe Komponenten (Klassenko...