Heim > Web-Frontend > js-Tutorial > Hauptteil

Analyse von Codebeispielen zum Kopieren von JavaScript-Arrays und -Objekten

黄舟
Freigeben: 2017-03-21 14:26:17
Original
1057 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich die relevanten Kenntnisse zum Kopieren von JavaScript-Arrays und Objekten vorgestellt. Hat einen sehr guten Referenzwert. Werfen wir einen Blick darauf mit dem Editor unten

1 Datentyp

Im engeren Sinne JS Alle Daten sind in zwei Haupttypen unterteilt: Basistypen und Referenztypen. Zu den Basistypen gehören Undefiniert, Null, Boolean, Zahl und String. Der Referenztyp ist Objekt Verwendetes Array, Datum, RegExp, Funktion usw. gehören alle zum Typ Objektklasse.

Einer der Unterschiede zwischen Basisdaten und Referenzdaten besteht darin, dass beim Kopieren einer Variablen die Basisdaten eine unabhängige neue Kopie kopieren, während die Referenzdaten einen Verweis auf die Originalvariable kopieren. Hier ist ein Beispiel:

// 基本类型数据的复制
var a = 10;
var b = a; // b = 10
a = 20; // a = 20, b = 10
// 引用类型数据的复制
var m = [1, 2];
var n = m;
m[0] = 10;
console.log(n[0]); // 10
Nach dem Login kopieren

Wenn ich den Wert des Referenztyps selbst anstelle der Referenz kopieren möchte, kann die obige Methode offensichtlich nicht verwendet werden.

2. Flache Kopie des Arrays

Flache Kopie bedeutet, dass beim Kopieren eines Objekts (Arrays) der Wert seines Referenzfelds nicht kopiert, sondern kopiert wird Ein Verweis auf das entsprechende Feld. Beispiel:

var src = [
 'alpha',
 ['bravo', 'chalie']
];
var dest = [];
for (var i = 0; i < src.length; i++) {
 dest[i] = src[i];
}
//此时,如果改变src中的引用字段,dest中相应的字段也会被改变
src[1].push(&#39;delta&#39;);
console.log(dest[1]); // [&#39;bravo&#39;, &#39;chalie&#39;, &#39;delta&#39;]
Nach dem Login kopieren

Flache Kopie wird im Allgemeinen für eindimensionale Arrays verwendet, d. h. wenn das Array keinen Referenztyp enthält. Häufig verwendete flache Kopiermethoden sind:

Concat-Methode

 var src = [&#39;alpha&#39;, &#39;bravo&#39;],
  dest = [];
 dest = dest.concat(src);
Nach dem Login kopieren

Concat-Methode wird häufiger beim Zusammenführen von Arrays verwendet, wie zum Beispiel:

 var a = [&#39;alpha&#39;, &#39;bravo&#39;],
  b = [&#39;chalie&#39;, &#39;delta&#39;],
  combine;
 combine = a.concat(b);
Nach dem Login kopieren

Es sollte insbesondere darauf hingewiesen werden, dass bei der Verwendung von concat zum Zusammenführen von Arrays alle Elemente in zwei (oder mehr) Arrays in ein neues Objekt kopiert werden. Bei großen Arrays ist der Overhead relativ hoch. Eine bessere Möglichkeit besteht darin, die Elemente des letzteren Arrays in das vorherige Array zu kopieren:

 var src = [&#39;alpha&#39;, &#39;bravo&#39;],
  dest = [&#39;chalie&#39;, &#39;delta&#39;];
 Array.prototype.push.apply(src, dest);
Nach dem Login kopieren

Slice-Methode

Slice-Methode kann zurückgegeben werden ausgewählte Elemente aus einem vorhandenen Array und gibt ein neues Array zurück.

 var src = [&#39;alpha&#39;, &#39;bravo&#39;],
 var dest = src.slice(0);
Nach dem Login kopieren

3. Flaches Kopieren von Objekten

Ein flaches Kopieren von Objekten kann mithilfe der For-In-Traversierung erreicht werden, und ein bequemeres Objekt wird in es6 bereitgestellt. Methode „assign()“.

 var src = {name: &#39;fox&#39;, age: 20},
  dest = null;
 dest = Object.assign({}, src);
Nach dem Login kopieren

Sie können auch $.extend in jQuery, _.extend im Unterstrich usw. verwenden, um Objekte zu kopieren.

4. Tiefe Kopie

Flache Kopie hat begrenzte Anwendungsszenarien. In weiteren Fällen hoffen wir, das Objekt in eine vollständige Kopie zu kopieren die Verwendung von Typeof- oder Instantof-Operatoren, um den Typ jedes Felds zu bestimmen. Wenn ein Feld vom Basistyp ist, kann es direkt kopiert werden. Wenn ein Feld vom Referenztyp ist, muss die obige Beurteilung für alle Felder des Feldes getroffen werden, was es uns leicht macht, die Verwendung von Rekursion zur Implementierung dieser Funktion in Betracht zu ziehen.

function deep_copy(src, dest) {
 for (var p in src) {
  if (Array.isArray(src[p]) || src[p] instanceof Object) {
   dest[p] = Array.isArray(src[p]) ? [] : {};
   arguments.callee(dest[p], src[p]);
  }else {
   dest[p] = src[p];
  }
 }
}
Nach dem Login kopieren
Da Arrays im obigen Code spezielle Objekte sind, können sie mit for-in durchlaufen werden.

Darüber hinaus können Sie auch die

json-Methode verwenden:

 function deep_copy_in_json(src) {
  return JSON.parse(JSON.stringify(src));
 }
Nach dem Login kopieren
Obwohl dies einfacher ist, werden viele

Attribute des Originalobjekts dies tun Gehen nach der Operation verloren, z. B. Konstruktoreigenschaften und einige Methoden im Objektprototyp.

Das obige ist der detaillierte Inhalt vonAnalyse von Codebeispielen zum Kopieren von JavaScript-Arrays und -Objekten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage