我有一个属性为name, value, desc
的object1,还有一个属性为name, value, desc, time, frame, getName, ...
的object2。
现在我想创建一个新的object1,但它的所有值都来自object1中的属性。
例如:
class Object1 {
name!: string;
value!: number;
desc!: string;
}
class Object2 {
name!: string;
value!: number;
desc!: string;
time!: date;
frame!: number;
}
let object2: Object2 = getMyObject();
// object2 has now name: "test", value: 5, desc: "testDesc", time: "27-03-2023", frame: 7, getName: function(), [...]
let object1: Object1 = new Object1();
fillValuesFromObject(object1, object2) // This should fill all the values of existing properties
console.log(object1); // name: "test", value: 5, desc: "testDesc"
// So all other properties from object2 that object1 doesn't have are ignored
我怎么能做这个fillValuesFromObject
?
1条答案
按热度按时间roejwanj1#
更新:当我写这个问题的答案时,直到最后我都不清楚作者想要实现什么。目前,阅读这个问题,我会为他提供一个完全不同的解决方案。
旧答案:
出现的第一个问题是您要复制的对象是通过引用复制还是克隆?复制对象的最简单的选择是简单地使用spread运算符:
Spreed操作符不会克隆对象的原型,因此只会创建一个形状相同的对象,但它不会有一个公共的
prototype
。您可以使用(但如果您关心此解决方案的性能,最好不要使用)将新对象的原型设置为被视为同一个类:克隆对象的另一个选择是使用Object类的静态assign方法(它也适用于类):
这两个方法都会以1:1的比例复制值,只是要注意里面的嵌套对象,因为它们会作为引用复制,也就是说,在
oldObject
中编辑一个嵌套对象,由于引用了同一个对象,也会改变newObject
中的值阅读更多关于working with objects
如果你想完全克隆一个对象,包括它的嵌套对象,你可以使用lodash依赖项中的
deepClone
方法。