Heim  >  Artikel  >  Web-Frontend  >  Tiefe Kopie von JavaScript-Objekten

Tiefe Kopie von JavaScript-Objekten

PHPz
PHPzOriginal
2017-04-04 10:18:431080Durchsuche

Der

Datentyp von js kann in zwei Hauptkategorien unterteilt werden:

  • Werttyp (Originaltyp):
    Beispielsweise sind die Typen „String“ und „Zahl“ beide Werttypen.

  • ReferenzTyp:
    Beispiel: Objekt, Array sind Referenztypen.

Lassen Sie uns kurz über den Unterschied zwischen ihnen sprechen:
Der offensichtlichste Unterschied ist die Zuweisung. Die Zuweisung des Werttyps ist eine echte Kopie-Zuweisung an eine neue -Variable:

var a, b = "issax";
a = b;
a +="_coder";
console.log(a);  //issax_coder
console.log(b);  //issax

Sehen Sie sich das obige Beispiel an, nachdem Sie b zu a zugewiesen haben. Die beiden Die Variablen a und b sind unabhängig voneinander. Das Ändern ihrer eigenen Werte hat keinen Einfluss auf den anderen.

Dann schauen Sie sich den Referenztyp an:

var obj_i, obj_ii = { name: 'issax' };
obj_i = obj_ii;
obj_i['career'] = 'coder';
console.log(obj_i);  //Object {name: "issax", career: "coder"}
console.log(obj_ii);  //Object {name: "issax", career: "coder"}

Sehen Sie, nachdem Sie obj_i den Wert von obj_ii zugewiesen haben, ändert sich durch Ändern des Inhalts von obj_i auch der Inhalt von obi_ii. Dies ist eine Referenz Typ. Der Variablenspeicher vom Referenztyp ist nicht der Inhalt selbst, sondern ein Zeiger auf den Inhalt. Ja, wenn Sie einen Wert zuweisen, weisen Sie diesen Zeiger tatsächlich nur auf den gleichen Inhalt zu das Gleiche? Es versteht sich von selbst.

Zhoucao, von welcher GUI spreche ich? Ich spreche von tiefem Kopieren von Objekten [Gesichtsbedeckung]

Kopieren kann in flaches Kopieren und tiefes Kopieren unterteilt werden Nachdem Sie das obige Beispiel gelesen haben, werden Sie wahrscheinlich wissen, was eine flache Kopie und was eine tiefe Kopie ist.
Der Zuweisungsprozess gewöhnlicher Werttypen ist eine tiefe Kopie, während die Zuweisung von Referenztypen eine flache Kopie ist.

Da das Objekt ein Referenztyp ist, ist sein normaler Zuweisungsprozess ein flaches Kopieren. Manchmal müssen Objekte jedoch auch tief kopiert werden. Was habe ich über GUI gesagt?

Als ich beispielsweise vor zwei Tagen an Vue arbeitete, stieß ich auf die Anforderung, nach Namen zu sortieren. Durch die ungerade Anzahl von Klicks werden die Elemente sortiert, und durch die gerade Anzahl von Klicks wird die ursprüngliche Sortierung wiederhergestellt Update Zeitpunkt. Das ist nicht einfach, einfach jedes Mal sortieren. Es ist wirklich dumm, das zu tun. Abgesehen von der ersten Sortierung, die sinnvoll ist, der zweiten, dritten, vierten, sechsten, siebten... Was hat das alles für einen Sinn? Sortieren Sie sie jedes Mal. Ist das eine Leistungsverschwendung? Dann ist es Zeit, die sortierten Objekte zu speichern ...
Dann ist es ein Referenztyp, den ich direkt am Anfang zugewiesen habe, und die Daten haben sich überhaupt nicht bewegt cover];

Möchten Sie Attribute einzeln rekursiv kopieren ? Dann ähnelt mein Objekt diesem:

Tiefe Kopie von JavaScript-Objekten

Paste_Image.png

Halten Sie das Gras, die echte rekursive Kopie ist sb, zum Glück habe ich daran gedacht Das ist eine gute Idee. Ist es nicht nur eine Frage der Umwandlung von Referenztypen in Werttypen?
Kellner, der Code oben:

function deepCopy(sender){
  var temp = JSON.stringify(sender);
  return JSON.parse(temp);
}  
var obj_i, obj_ii = { name: 'issax' };
obj_i = deepCopy(obj_ii);
obj_i['career'] = 'coder';
console.log(obj_i);  //Object {name: "issax", career: "coder"}
console.log(obj_ii);  //Object {name: "issax"}

Tiefe Kopie von JavaScript-Objekten

Paste_Image.png

Das obige ist der detaillierte Inhalt vonTiefe Kopie von JavaScript-Objekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Recat.jsNächster Artikel:Recat.js