Метод оператора распространения выполняет только глубокое копирование самого массива, а не объектов внутри него. Объекты в c
являются только ссылочными и в действительности указывают на объекты в a
.
Наиболее надежным способом остается использование JSON.stringify
, а затем JSON.parse
. Уловка в том, что произойдет потеря некоторых данных, если у вас есть специальные типы в массиве.
function clone(arr) {
return JSON.parse(JSON.stringify(arr));
}
let a =[{b:{c:100}}]
let c = clone(a);
c[0].b = {l:200}
console.log( a )