Изменяется родительский массив
Добрый день!
У меня есть массив settings.users с исходными данными. В необходимой функции я делаю: users = settings.users; Далее идёт поиск, замена значений в users. Но все данные так же меняются в settings.users. Как это исправить? методы array.push не подходят. |
http://web.izjum.com/javascript-copy...comment-page-1
Потому что в JS по значению копируются только примитивные типы Сложные копируются по ссылке т.е. "=" не создаёт в памяти копию объекта а просто берет ссылку на уже существующий объект. |
а ты его клонируй, к примеру так
users = settings.users.slice(0); :) |
...только если там есть подмассивы то их тоже надо отдельно клонировать.)
|
У меня массив объектов. Пол дня бьюсь в поисках решения =/
|
Если нет циклических ссылок, то можно сделать так:
users = JSON.parse( JSON.stringify(settings.users) ); |
Цитата:
a="foo" b=a alert(a===b) // true ничего там не копируется. а и b указывают на один и тот же объект. Цитата:
|
Цитата:
var obj1 = {}, obj2 = {}; obj1.aaa = obj2; obj2.bbb = obj1; try { JSON.stringify(obj1); } catch(e) { alert(e); } |
Цитата:
a="foo" b=a alert(a===b) // true a = "fppp"; console.log(b); //foo В данном случае они не Цитата:
|
tsigel,
Ничего там у Вас не копируется. a вначале указывала на foo, а после присваивания стала указывать на fppp, только и всего. |
Часовой пояс GMT +3, время: 23:58. |