javascript - 从未知动态对象中删除特定的已知属性
问题描述
我有一个函数,它接受一个动态对象并以角度打字稿返回一个对象:
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.data。
谢谢您的帮助!
解决方案
简短答案: 浅拷贝对象:
this.dataCopy = {...this.data};
然后,您可以像以前一样删除该属性。
长答案:
分配有非原始值(例如,不是字符串、不是数字、不是符号)的变量被赋予对该值的引用。该引用指向对象在内存中的位置。变量实际上并不包含值。
所以当你在做的时候:
let data2 = this.data;
您正在复制引用(指向对象在内存中存储位置的指针),而不是对象!对 data2 的每次更改都会反映在 this.data 中,因为它们都是指向同一个对象的指针!
在简短的回答中,我说浅拷贝,为什么?浅拷贝,因为它只会复制对象属性,而不是任何嵌套属性。如果您有一个具有嵌套属性的对象,则需要明确声明要复制的嵌套属性或使用其他方法。
推荐阅读
- java - 如何为@ResponseStatus 创建分支结果
- android - 使用 Firebase 处理后台推送通知,支持 Doze
- python - 如何使用 BeautifulSoup 从父子标签中获取文本以放入 DOCX 表中
- npm - npm 更新检查失败是否意味着 npm 没有安装?
- python - 使用 Keras 进行贪婪分层训练
- c - 使用指针和线程时避免竞争条件
- c# - 如何将树对象绑定到数据网格?
- html - 使屏幕阅读器以不同的方式阅读部分
- php - Wp-admin 页面重定向到 404 错误页面
- python - Flask / SQLAlchemy - 模型数据验证