克隆后原始对象已更改

Dmi*_*sev 4 javascript node.js typescript

我想克隆一个对象然后更改它,但是当我这样做时,原始对象也会更改:

let items = result.Project.ItemGroup[1].Build;
let newItem = { ...items[0] };
newItem.$.Include = `test`;
Run Code Online (Sandbox Code Playgroud)

在对newItem对象进行赋值后,items[0]值也会更改。

T.J*_*der 6

传播仅制作浅表副本。您没有更改要复制的内容,而是要更改其对象的$属性,而该对象没有被复制。items[0].$并且newItem.$都引用同一个对象:

const items = [
  {
    $: {
      Include: "test"
    }
  }
];
let newItem = {...items[0]};
console.log(items[0].$ === newItem.$); // true
Run Code Online (Sandbox Code Playgroud)

你需要像这样的东西克隆$对象:

let newItem = {...items[0], $: {...items[0].$}};
Run Code Online (Sandbox Code Playgroud)

let newItem = {...items[0], $: {...items[0].$}};
Run Code Online (Sandbox Code Playgroud)

(或一般的深层克隆函数。)