Как сделать чтобы переменная в объекте исходного массива не менялась, а менялась только в массиве изменяемых объектов?

Чтобы переменная в объекте исходного массива не изменялась при изменении в массиве изменяемых объектов в 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, для глубокого копирования объектов.