Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2014, 14:44
Аватар для voodoo_dn
Интересующийся
Отправить личное сообщение для voodoo_dn Посмотреть профиль Найти все сообщения от voodoo_dn
 
Регистрация: 17.12.2014
Сообщений: 11

Изменяется родительский массив
Добрый день!

У меня есть массив settings.users с исходными данными.
В необходимой функции я делаю:
users = settings.users;

Далее идёт поиск, замена значений в users. Но все данные так же меняются в settings.users. Как это исправить? методы array.push не подходят.
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2014, 14:54
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

http://web.izjum.com/javascript-copy...comment-page-1

Потому что в JS по значению копируются только примитивные типы
Сложные копируются по ссылке т.е. "=" не создаёт в памяти копию объекта а просто берет ссылку на уже существующий объект.
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2014, 14:56
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

а ты его клонируй, к примеру так
users = settings.users.slice(0);

Ответить с цитированием
  #4 (permalink)  
Старый 22.12.2014, 15:50
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

...только если там есть подмассивы то их тоже надо отдельно клонировать.)
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 22.12.2014, 17:08
Аватар для voodoo_dn
Интересующийся
Отправить личное сообщение для voodoo_dn Посмотреть профиль Найти все сообщения от voodoo_dn
 
Регистрация: 17.12.2014
Сообщений: 11

У меня массив объектов. Пол дня бьюсь в поисках решения =/
Ответить с цитированием
  #6 (permalink)  
Старый 22.12.2014, 17:19
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Если нет циклических ссылок, то можно сделать так:
users = JSON.parse( JSON.stringify(settings.users) );
Ответить с цитированием
  #7 (permalink)  
Старый 22.12.2014, 18:20
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от MallSerg
Потому что в JS по значению копируются только примитивные типы
a="foo"
b=a
alert(a===b)
// true

ничего там не копируется. а и b указывают на один и тот же объект.
Сообщение от jsnb
Если нет циклических ссылок
Что значит циклические ссылки?
Ответить с цитированием
  #8 (permalink)  
Старый 22.12.2014, 18:41
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от krutoy
Что значит циклические ссылки?
var obj1 = {}, obj2 = {};
obj1.aaa = obj2; 
obj2.bbb = obj1;
try {
  JSON.stringify(obj1);
} catch(e) {
  alert(e);
}
Ответить с цитированием
  #9 (permalink)  
Старый 22.12.2014, 18:44
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от krutoy Посмотреть сообщение
a="foo"
b=a
alert(a===b)
// true

ничего там не копируется. а и b указывают на один и тот же объект.
Что значит циклические ссылки?
a="foo"
b=a
alert(a===b)
// true
a = "fppp";
console.log(b);
//foo

В данном случае они не
Сообщение от krutoy Посмотреть сообщение
указывают на один и тот же объект
, а сравниваются по значению, потому что это не объекты а строки.
Ответить с цитированием
  #10 (permalink)  
Старый 22.12.2014, 18:53
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

tsigel,
Ничего там у Вас не копируется. a вначале указывала на foo, а после присваивания стала указывать на fppp, только и всего.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в шаблоне диррективы узнать массив это или строка? delias Angular.js 1 18.03.2014 07:33
Отправить, когда четко соберется массив vas88811 Events/DOM/Window 11 26.02.2014 21:55
Массив объектов doox911 Библиотеки/Тулкиты/Фреймворки 6 16.01.2014 22:36
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30