从未知动态对象中删除特定的已知属性



我有一个函数,它接受一个动态对象,并以角度类型脚本返回一个对象:

public clean(row: object): object {
//[... what to do here ? ]
return row;
}

该功能应能够接受任何型号/接口的对象

让我们假设我有以下数据,我正在通过函数:

this.data = {
property1: 1,
property2: 'prop2',
property3: 'prop3',
property4: 'prop4'
}

我想要函数";清洁";以上返回以下内容:

this.data2 = {
property1: 1,
property2: 'prop2',
property3: 'prop3'
}

换句话说,我希望每次都删除property4。

然而,我希望this.data是不可变的,这意味着我不想覆盖它,但我希望在不覆盖旧模型的情况下返回新模型(这就是我现在的问题,它一直在覆盖它(。

我该怎么做?我尝试过使用以下内容:

let data2 = this.data;
delete data2['property4'];
return data2;

但是,它正在覆盖这个数据。

谢谢你的帮助!

简短回答:浅层复制对象:

this.dataCopy = {...this.data};

然后,您可以像现在这样删除属性。

长答案:

被赋予非基元值(例如,不是字符串、不是数字、不是符号(的变量将被赋予该值的引用。该引用指向对象在内存中的位置。变量实际上并不包含该值。

所以当你在做:

let data2 = this.data;

您正在复制引用(指向对象存储在内存中的位置的指针(,而不是对象!对data2的每一次更改都将反映在this.data中,因为它们都是指向同一对象的指针!

在简短的回答中,我说浅抄,为什么?浅复制,因为它只复制对象属性,而不复制任何嵌套属性。如果您有一个具有嵌套属性的对象,则需要显式声明要复制的嵌套属性或使用其他方法。

最新更新