@SergeiB

Почему при изменении копии массива изменяется и исходный массив?

Есть массив с определёнными данными:
var markers = [...];
Я его копирую и добавляю новое значение для каждого элемента:
var nearMarkers = markers.slice();
nearMarkers.forEach(function(marker) {
  marker.distance = someValue;
});

В результате это значение появляется и в исходном массиве. Почему так происходит? Как сделать независимую копию?
  • Вопрос задан
  • 337 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Потому что вы копируете массив, но не копируете вложенные объекты. Новый массив получает ссылки на те же объекты.

const nearMarkers = markers.map(obj => ({ ...obj }));
В этом случае ссылки на вложенные объекты в obj сохранятся.

const nearMarkers = JSON.parse(JSON.stringify(markers));
В этом случае все вложенные объекты в obj будут клонированы.

Если используете в коде spread operator, то можете использовать такой вариант:
const nearMarkers = markers.map(marker => ({ ...maker, distance: someValue }));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы