25.09.2014, 15:24
|
Аспирант
|
|
Регистрация: 27.07.2012
Сообщений: 73
|
|
Поведение массивов при копировании.
Добрый день.
Возникла такая проблема: есть у меня некий массив с данными(default_arr), далее я его копирую
var arr = default_arr.concat();
далее происходят некоторые изменения с массивом arr, но почему-то эти изменения применяются и к default_arr, что мне совершенно не нужно.
Почему так происходит? И как я могу их "разделить"?
|
|
25.09.2014, 15:39
|
|
Профессор
|
|
Регистрация: 22.02.2012
Сообщений: 212
|
|
Не вижу проблему
var default_arr = [1,2,3];
var arr = default_arr.concat();
arr.push(6);
console.log(arr);
console.log(default_arr);
|
|
25.09.2014, 15:39
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,214
|
|
Сообщение от FoxTrix
|
происходят некоторые изменения с массивом arr, но почему-то эти изменения применяются и к default_arr
|
Бивас, тест! (с)
var a1=[1,2,3,4,5];
var a2=a1.concat();
a2[1]=10;
alert(a1);
alert(a2);
Первый массив не меняется!
|
|
25.09.2014, 15:42
|
Аспирант
|
|
Регистрация: 27.07.2012
Сообщений: 73
|
|
Вот и я думаю почему так, ведь проблемы быть не должно, т.к. раньше так тоже делал.
Есть момент о котором забыл упомянуть, массив трехмерный.
|
|
25.09.2014, 15:51
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,214
|
|
Сообщение от FoxTrix
|
ведь проблемы быть не должно
|
Ее и нет. Я это продемонстрировал...
Сообщение от FoxTrix
|
Есть момент о котором забыл упомянуть, массив трехмерный.
|
В JS нет "трехмерных" массивов. Есть одномерный массив, элементом которого может быть ДРУГОЙ массив.
|
|
25.09.2014, 15:54
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,214
|
|
Вот, что бывает с ДРУГИМ массивом.
var a1=[1,2,[11,22,33],4,5];
var a2=a1.concat();
a2[1]=10;
alert(a1);
alert(a2);
a2[2][1]='Опа!';
alert(a1);
alert(a2);
|
|
25.09.2014, 15:57
|
Аспирант
|
|
Регистрация: 27.07.2012
Сообщений: 73
|
|
Сообщение от ksa
|
Ее и нет. Я это продемонстрировал...
|
Её нет в примере. Когда я увидел эту ошибку, я и сам написал такой пример, и убедился что так быть не должно. Однако в коде я её наблюдаю. Если это поможет, могу выложить код, только он довольно объемный.
Сообщение от ksa
|
В JS нет "трехмерных" массивов. Есть одномерный массив, элементом которого может быть ДРУГОЙ массив.
|
Знание терминологии это хорошо, но мне бы сейчас совет всё-таки по практической части....
|
|
25.09.2014, 15:58
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,214
|
|
FoxTrix, вот
var a1=[1,2,[11,22,33],4,5];
var a2=a1.concat();
a2[2]=a1[2].concat();
a2[1]=10;
a2[2][1]='new';
alert(a1);
alert(a2);
"Первый" массив опять не поменялся!
|
|
25.09.2014, 15:59
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,214
|
|
Сообщение от FoxTrix
|
могу выложить код, только он довольно объемный
|
Кому нужен чужой, большой код? Для демонстрации нужно уметь делать тестовые примеры.
|
|
25.09.2014, 16:01
|
Аспирант
|
|
Регистрация: 27.07.2012
Сообщений: 73
|
|
Ок, сам найду решение, спасибо.
|
|
|
|