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