克隆后原始对象已更改

时间:2019-04-09 17:41:08

标签: javascript node.js typescript

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

let items = result.Project.ItemGroup[1].Build;
let newItem = { ...items[0] };
newItem.$.Include = `test`;

在对newItem对象进行分配后,items[0]的值也被更改。

1 个答案:

答案 0 :(得分:6)

仅传播副本。您没有更改要复制的内容,而是在对象的$属性上进行了更改,但您没有复制。 items[0].$newItem.$都引用相同对象:

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

您需要类似的内容来克隆$对象:

let newItem = {...items[0], $: {...items[0].$}};

const items = [
  {
    $: {
      Include: "test"
    }
  }
];
let newItem = {...items[0], $: {...items[0].$}};
console.log(items[0].$ === newItem.$); // false
newItem.$.Include = "updated";
console.log(items[0].$.Include);       // "test"
console.log(newItem.$.Include);        // "updated"

(或general deep-clone function。)