С this.templates.push(k);
вы добавляете ссылку, а не копию, от k
до templates
.Следовательно, когда вы изменяете свойства ссылки в массиве, вы изменяете тот же объект, что и при непосредственном изменении k
.
Простой пример, показывающий разницу между ссылкой и копией (в данном случаеЯ создаю копию, используя JSON.parse (JSON.stringify (...)), который я бы не рекомендовал для реальных реальных проектов):
const original = {"property":"value"};
const reference = original;
const copy = JSON.parse(JSON.stringify(original));
const array = [reference, copy];
array[0].property = 'new value for reference';
array[1].property = 'new value for copy';
console.log(reference.property === original.property);
console.log(copy.property !== original.property);
Если у вас неглубокий объект, вы можете просто использовать оператор распространения (this.templates.push({...k});
) для создания копии.
Если у вас есть объекты со свойствами k
, что означает, что на них будут ссылаться в копии, вам потребуется глубокое клонирование k
.