Поведение массивов при копировании.
Добрый день.
Возникла такая проблема: есть у меня некий массив с данными(default_arr), далее я его копирую var arr = default_arr.concat(); далее происходят некоторые изменения с массивом arr, но почему-то эти изменения применяются и к default_arr, что мне совершенно не нужно. Почему так происходит? И как я могу их "разделить"? |
Не вижу проблему
var default_arr = [1,2,3]; var arr = default_arr.concat(); arr.push(6); console.log(arr); console.log(default_arr); |
Цитата:
var a1=[1,2,3,4,5]; var a2=a1.concat(); a2[1]=10; alert(a1); alert(a2); Первый массив не меняется! :) |
Вот и я думаю почему так, ведь проблемы быть не должно, т.к. раньше так тоже делал.
Есть момент о котором забыл упомянуть, массив трехмерный. |
Цитата:
Цитата:
|
Вот, что бывает с ДРУГИМ массивом. ;)
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); |
Цитата:
Цитата:
|
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); "Первый" массив опять не поменялся! |
Цитата:
|
Ок, сам найду решение, спасибо.
|
Цитата:
http://javascript.ru/forum/misc/5041...tml#post332236 |
Цитата:
|
Сделал вроде по аналогии, всё равно не работает =\
var default_arr = [ ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст'], 'текст', 'текст'] ]; var arr = default_arr.concat(); for(var i = 0; i < arr.length; i++) { arr[i][2] = default_arr[i][2].concat(); } я всё верно понял? |
Цитата:
var default_arr = [ ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст','текст'], 'текст', 'текст'], ['текст', 'текст', ['текст'], 'текст', 'текст'] ]; var arr = default_arr.concat(); for(var i = 0; i < default_arr.length; i++) { arr[i] = default_arr[i].concat(); arr[i][2] = default_arr[i][2].concat(); } arr[1][2]='[new]'; alert(default_arr); alert(arr); |
FoxTrix, вот еще статейка...
http://blog.eney-solutions.com.ua/co...avascript.html Или вот... http://webonrails.ru/post/1062/ |
Цитата:
Спасибо, всё работает. |
В JS объекты за исключением примитивных(строк, чисел и булева типа) передаются по ссылке. Чтобы создать копию используй такую функцию function clone(o){return JSON.parse(JSON.stringify(o))}
|
Часовой пояс GMT +3, время: 22:26. |