Чтобы переменная в объекте исходного массива не изменялась при изменении в массиве изменяемых объектов в JavaScript, вам потребуется создать глубокую копию объекта вместо простого ссылочного присваивания.
JavaScript работает с объектами и массивами по ссылке, поэтому при присваивании объекта другой переменной создается только ссылка на него, а не новый объект. Поэтому, если вы будете изменять переменную в изменяемом массиве, она также будет изменяться и в исходном массиве, так как они ссылаются на один и тот же объект.
Для создания глубокой копии объекта вы можете воспользоваться различными способами. Один из них - использование метода JSON.parse(JSON.stringify(obj))
. Этот метод преобразует объект в строку JSON и затем восстанавливает объект из этой строки.
Вот пример, демонстрирующий использование этого метода:
// Исходный массив let originalArray = [ { name: "John", age: 30 }, { name: "Jane", age: 25 } ]; // Создание глубокой копии объекта let copiedArray = JSON.parse(JSON.stringify(originalArray)); // Изменение объекта в изменяемом массиве copiedArray[0].name = "Mike"; console.log(originalArray[0].name); // Вывод: "John" console.log(copiedArray[0].name); // Вывод: "Mike"
В этом примере мы создаем глубокую копию исходного массива originalArray
с помощью JSON.parse(JSON.stringify(originalArray))
. После этого, при изменении имени в объекте copiedArray
, имя в объекте originalArray
остается неизменным.
Важно отметить, что использование JSON.stringify()
и JSON.parse()
может быть неэффективным при работе с большими или сложными объектами, так как они требуют сериализации и десериализации объектов в JSON. В таких случаях, возможно, будет лучше использовать библиотеки, например, Lodash, для глубокого копирования объектов.