2013-03-30 13 views
49

Chcę utworzyć tablicę z istniejącej tablicy, aby móc modyfikować nową tablicę bez wpływu na stary. Rozumiem, że tablice są zmienne i dlatego nowa tablica wpływa na stare.Javascript copy array do nowej tablicy

E.g.

old = ["Apples", "Bananas"]; 
new = old; 

new.reverse(); 

Stary został również odwrócony.

W języku Python mogę po prostu wykonać new = list(old), ale wykonanie new = new Array(old); powoduje umieszczenie starej listy na liście.

+0

W ES6 można użyć spread składni przykład: ' var arrOld = ["Jabłka", "banany"]; var arrNew = [... arrOld]; ' – GibboK

Odpowiedz

103

Można użyć metody .slice:

var old = ["Apples", "Bananas"]; 
var newArr = old.slice(0); 
newArr.reverse(); 
// now newArr is ["Bananas", "Apples"] and old is ["Apples", "Bananas"] 

Array.prototype.slice zwraca płytkie kopię części tablicy. Nadając mu 0 jako pierwszy parametr oznacza, że ​​wracają kopię wszystkich elementów (począwszy od indeksu 0 to jest)

+0

dzięki! Postaram się odpowiedzieć, kiedy będę mógł. – jdborg

+0

Nie ma problemu, cieszę się, że pomogło. –

+13

Możesz po prostu użyć 'old.slice()', ponieważ 0 jest domyślne. Zobacz [slice() docs] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) –

9

Spróbuj następującą

newArray = oldArray.slice(0);