2012-03-20 4 views
0

Просто посмотрите на код, и вы поймете, что я имею в виду:JavaScript создать использование резервного копирования массива

​var aBackup = [3, 4]; // backup array 
​​var a = aBackup; // array to work with is set to backup array 
a[0]--; // working with array.. 
a = aBackup; // array o work with will be rested 
console.log(a); // returns [2, 4] but should return [3, 4] 
console.log(aBackup);​ // returns [2, 4] too​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ but should return [3, 4] too 
+1

Возможный дубликат [Есть метод клонирования массива в jQuery?] (Http://stackoverflow.com/questions/3775480/is-there-a-method-to-clone-an-array-in- jquery) - несмотря на термин jQuery в заголовке/вопросе, решения не связаны с jQuery. –

+0

@FelixKling жаль, что I'vent не увидел этот дубликат. Каждый должен голосовать за закрытие. – noob

ответ

3

Вы должны сделать реальные копии Массивы вместо того, чтобы просто используя ссылку:

var aBackup = [3, 4]; // backup array 
var a = aBackup.slice(0); // "clones" the current state of aBackup into a 
a[0]--; // working with array.. 
a = aBackup.slice(0); // "clones" the current state of aBackup into a 
console.log(a); // returns [3, 4] 
console.log(aBackup); // returns [3, 4] 

См MDN документации на slice -метода

+1

приятно, избили меня! :) – ChrisR

1

Не Javascript использует указатель для массивов? Должно ли ​​var a = aBackup; сделать копию? в противном случае результаты кажутся мне нормальными ...

1

Массив является ссылочным типом объекта, поэтому внесенные в него изменения изменят базовое значение, на которое он указывает, a и aBackup укажут на одно и то же значение, а изменение сделанный к а также изменит aBackup.

1

Это происходит потому, что, когда вы сделаете это, вы не создавая копию массива, а вводит ссылку на исходный массив.

var a IS aBackup; // if you will 

Если вам нужно сделать, это клонировать массив резервных копий.