2017-07-11 24 views
0

Kürzlich hörte ich von etwas namens oberflächliches Kopieren in Javascript.Flaches Kopieren - nicht verstanden

Ich habe gelernt, dass array.slice (0) eine flache Kopie des ursprünglichen Arrays zurückgibt (was bedeutet, dass Änderungen am ursprünglichen Array im doppelten Array widergespiegelt werden) .. aber es passiert nicht.

jetzt originales Array hat [1,2,3], aber doppeltes Array hat [1,2].

Soweit ich verstanden habe, dachte ich, flache Kopie wird die Änderungen in beiden Arrays widerspiegeln, daher sollten beide Array gleich sein.

Aber wenn ich so tun, ist es passiert:

original = [1,2]; 
duplicate = original; //thinking it as a deep copy 
original.push(3); 

Gibt es große Erklärer gibt ???

+0

Eine flache Kopie ist nicht dasselbe wie ein Alias. Flache Kopie bedeutet nur, dass wenn die Liste Referenzen enthält, die kopierte Liste die exakt gleichen Referenzen enthält, im Gegensatz zu Verweisen auf kopierte Objekte. –

+1

_ "bedeutet, dass Änderungen, die am ursprünglichen Array vorgenommen wurden, sich im Duplikat-Array widerspiegeln" _ Hier haben Sie missverstanden - es wäre gut zu sehen, woher Sie das gelernt haben. Was es sagen sollte ist etwas mehr wie _ Änderungen an ** Elemente in ** das ursprüngliche Array wird in das Duplikat-Array "_ IE widerspiegeln, wenn Sie etwas komplexer als nur Zahlen hatte und Eigenschaften für Objekte etc. –

+0

aktualisiert Versuchen Sie Folgendes: 'orginal = [1,2, [3,4]]; duplicate = Original.slice(); Original [2] .Push (5); console.log (duplicate); ' –

Antwort

0

Der Aufruf .slice() erstellt ein neues Array. Es ist eine eindeutige Anordnung vom Original, und es gibt keine dauerhafte Beziehung zwischen den beiden. Nach dem Aufruf von .slice() in Ihrem ersten Codebeispiel ist das Array "Duplikat" also eigenständig. Änderungen am Original werden nur im ursprünglichen Array wiedergegeben.

0

Eine flache Kopie würde nur die Elemente im Array gelten. Nach dem Aufruf von .slice() erhalten Sie ein neues Array. Änderungen an den Elementen würden sich widerspiegeln, Änderungen am Array nicht.

Verwandte Themen