1

我需要创建我的对象的克隆,而不创建它的引用。当我尝试复制 EquipmentClass 时,女巫是我对其克隆的主要对象,如果我更改 EquipmentClass 的某些属性,它也会更改我的 EquipmentClassCloneEdit。我不希望这种情况发生。

我试图这样分配值:

this.equipmentClassCloneEdit = Object.assign({}, this.equipmentClass);

这是我的模型:

export class EquipmentClass {
    equipmentClassId: number;
    name: string;
    description: string;
    isDeleted: boolean;
    propertyValuesList: EquipmentClassPropertyValue[] = [];
}
4

2 回答 2

1

尝试this.equipmentClassCloneEdit = JSON.parse(JSON.stringify(this.equipmentClass))

Object.assign()创建一个浅拷贝,因此它不适用于像您的 propertyValuesList 数组这样的非基元。

于 2019-07-19T19:05:11.093 回答
1

您可以使用 lodash 的 cloneDeep 方法进行深度克隆。 https://lodash.com/docs/#cloneDeep

  1. 安装“lodash”包
  2. import cloneDeep from 'lodash/cloneDeep';
  3. 只需调用它:this.equipmentClassCloneEdit = cloneDeep(this.equipmentClass);

使用这种克隆函数比 stringify 更好,然后解析解决方案,因为它还保留了字符串化时 JSON ingores 的成员,例如 Functions、Symbols、BigInts 等。

于 2019-07-19T19:23:38.457 回答