Size: a a a

2020 September 12

В

Виктория in pro.js
Арсэн
Подскажите
Есть массив с одним элементом, мне нужно расширить данный массив(до 3х элементов) посредством копирования первого элемента. Но загвоздка в том, что concat копирует элемент вместе с ссылкой на объект, что ставит крест на редактировании новых элементов массива
push также не подходит

Пример:
let arr = [0];
arr = arr.concat(arr).concat(arr);
// arr = [0, 0, 0];
Далее нужно отредактировать значения под индексом 1 и 2
arr[1] = 1;
arr[2] = 2;
Но при редактировании из-за ссылок на объекты получается следующее:
// arr = [2, 2, 2]
А нужно
// arr = [0, 1, 2]

Какие есть вариации?
Подожди. О каких объектах идет речь?
источник

А

Арсэн in pro.js
При копировании одного массива в другой через concat мы получаем значение с ссылкой, т.е. при изменении нового значения мы изменим и предыдущее, из которого изначально копировали
источник

В

Виктория in pro.js
Я поняла
источник

В

Виктория in pro.js
Пример некорректный у тебя просто
источник

В

Виктория in pro.js
Сбивает с толку
источник

В

Виктория in pro.js
Ты там объекты какие-то хранишь, а пример приводишь на примитивах, которые не являются ссылочным типом данных. Тебе нужно делать полную копию объекта перед очередным добавлением его в массив
источник

А

Арсэн in pro.js
Если подробнее, то каким образом это сделать и расширить массив?
источник

В

Виктория in pro.js
Арсэн
Если подробнее, то каким образом это сделать и расширить массив?
Если у объекта только один уровень вложенности, то можно так
источник

А

Аркаша Алопекский 🏴‍... in pro.js
Виктория
Если у объекта только один уровень вложенности, то можно так
а если много то как лучше?
источник

А

Аркаша Алопекский 🏴‍... in pro.js
Мне тут приходится много копировать похожих объектов с большой глубиной, приходится JSON.stringify() юзать
источник

В

Виктория in pro.js
Написать функцию
источник

В

Виктория in pro.js
deepCopy
источник

А

Арсэн in pro.js
Спасибо
источник

А

Аркаша Алопекский 🏴‍... in pro.js
Проще через жсон)))
источник

А

Аркаша Алопекский 🏴‍... in pro.js
думаю так даже быстрее
источник

В

Виктория in pro.js
Аркаша Алопекский 🏴‍☠️
Проще через жсон)))
А если у тебя там функции будут? Тут уж через stringify не получится
источник

В

Виктория in pro.js
Аркаша Алопекский 🏴‍☠️
Проще через жсон)))
Я на собесе писала функцию deepCopy
источник

А

Аркаша Алопекский 🏴‍... in pro.js
Виктория
А если у тебя там функции будут? Тут уж через stringify не получится
Ну в моем кейсе точно не будет
источник

А

Аркаша Алопекский 🏴‍... in pro.js
Виктория
Я на собесе писала функцию deepCopy
крутая, Надо бы тоже написать
источник

С

Славик in pro.js
Виктория
Я на собесе писала функцию deepCopy
let obj = JSON.parse(JSON.stringify(original))
источник