用期望的属性填充Javascript中的对象

用期望的属性填充Javascript中的对象,javascript,Javascript,我有一个原型 class Animal() { constructor(name, weight) { this.name = name this.weight = weight } } 还有一些即将到来的对象,它包含这些属性和其他一些属性 const obj = { name: "name", weight: 5, someRedundantProp: "bla" } 我真的很喜欢对象的JS映射。assign通常会为我

我有一个原型

class Animal() {
    constructor(name, weight) {
        this.name = name
        this.weight = weight
    }
}
还有一些即将到来的对象,它包含这些属性和其他一些属性

const obj = {
    name: "name",
    weight: 5,
    someRedundantProp: "bla"
}
我真的很喜欢对象的JS映射。assign通常会为我创建一个包含所有属性的对象,但这里我只想用基本字段填充这个新对象。 当然,我可以像这样映射这个对象

new Animal(obj.name, obj.weight)
但如果在某个时候我要引入新的属性,我将不得不在这里更改代码,这是我不想做的


有更好的方法吗?

这应该适合您:

class Animal {
    constructor(obj) {
        const defaultFields = {
            name: "",
            weight: 0
        }
        Object.keys(defaultFields).forEach(key => defaultFields[key] = obj[key]);
        Object.assign(this, defaultFields);
    }
}

您可以检查第一个参数是否为对象,然后将该对象指定给该参数

但请注意,这也有一些令人讨厌的副作用

类动物{
建造师(obj){
//创建包含所有可用选项的对象
const defaultOptions={
名称:“”,
重量:0,,
};
//检查所有可用选项
key(defaultOptions).forEach(key=>{
//检查obj是否有键,否则使用默认选项
此[键]=对象[键]| |默认选项[键];
} );
}
}
常量对象={
姓名:“姓名”,
体重:5,
一些多余的道具:“布拉”
}
常数a=新动物(obj);

控制台日志(a)我现在选择这个解决方案

let animal = new Animal()
Object.keys(animal).forEach(field => animal[field] = obj[field])

constructor(obj){this.name=obj.name;..
“但这里我只想用基本字段填充这个新对象”-然后定义什么是“基本字段”。它们是动物类已经“拥有”的实际属性吗?然后正确声明它们,以便可以循环使用(从.hasOwnProperty开始)然后选择与要“复制”的名称相同的输入对象属性@CBroe、essential是构造函数expects@JJJ,它实际上可以是:)我不明白你的意思。嗯,在这种情况下,它将包含所有属性,不是吗?包括一些RedundantPropYes。哦,对不起,你只想允许某些属性吗?如果是的话,可能还有另一个好的解决方案来更新我的答案。它只是现在获取有效属性。
reduce
看起来有点过分:)为什么不直接使用
forEach
并直接分配字段?创建expectedFields而不是使用Object有意义吗。keys@VladHatko那些键指定在哪里?我的意思是,与我的答案相比,没有重写构造函数