首页 > 解决方案 > 克隆后更改原始对象

问题描述

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

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

在我对newItem对象进行分配后,items[0]值也发生了变化。

标签: javascriptnode.jstypescript

解决方案


传播只做一个拷贝。您没有更改您复制的内容,您正在更改其$属性上的对象,而您没有复制该对象。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"

(或一般的深度克隆功能。)


推荐阅读