Мне нужно получить данные с сервера (или файла json) и добавить их в «firstVariable», чтобы выполнить с ним некоторые манипуляции, и «secondVariable» для неизмененных данных по умолчанию (те же данные с сервера). Но когда я меняю данные в firstVariable, они также меняются и во secondVariable. Мой вопрос: Почему? Когда я добавляю данные в переменные, я создаю из них новый массив. Есть пример
Возможный дубликат Почему изменение массива в JavaScript влияет на копии массива?
Возможный дубликат Как вы клонируете массив объектов в Javascript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема заключается в том, что когда вы используете оператор распространения [...data], вы распространяете ссылку на объекты внутри массива.
Вместо этого вы хотите сопоставить объекты с новой ссылкой на объект, вы можете сделать что-то вроде
this.json = data.map(x => Object.assign({}, x));
См. следующий фрагмент.
let data = [{ id: 123 }];
let a = [...data];
let b = [...data];
a[0].id= 1234;
console.info('Without creating a new object');
data = [{ id: 123 }];
console.info(`A: ${JSON.stringify(a)}`);
console.info(`B: ${JSON.stringify(b)}`);
let c = data.map(x => Object.assign({}, x));
let d = data.map(x => Object.assign({}, x));
c[0].id= 9999;
console.info('Creating a new object');
console.info(`C: ${JSON.stringify(c)}`);
console.info(`D: ${JSON.stringify(d)}`);
Потому что вы манипулируете одним и тем же типом ссылка. Добавьте
console.info(data);и вы увидите, что данные представляют собой массив объектов, передача их в новый массив не меняет того факта, что новый массив будет получать указатели на те же экземпляры.