繁体   English   中英

Object.Assign() 不覆盖现有属性

[英]Object.Assign() without overriding existing properties

原谅标题,因为我不确定这是否可能。

我有一个像这样的json模型

json 模型“数据”

{
   "RegisteredAddress": "1 street, Sw3 1aq",
   "TradingAddress": "2 street, sw4, 5ad",
}

我想映射到一个看起来像这样的模型

AddressModel.ts 'addressModel'

{
   "RegisteredAddress": null,
   "TradingAddress": null,
   "PreviousAddresses": ["Previous Address Street, RH10 1BG"]
}

我可以使用Object.Assign(this.addressModel, data); 不覆盖 Address.ts 模型上现有的填充属性。 我本质上只想填充 json 模型中的字段,而不覆盖正在分配的 json 上不存在的任何现有属性。 最终结果应该是

AddressModel.ts 'addressModel'

{
   "RegisteredAddress": "1 street, Sw3 1aq",
   "TradingAddress": "2 street, sw4, 5ad",
   "PreviousAddresses": ["Previous Address Street, RH10 1BG"]
}

了解我可以手动映射这些属性,但这是一个示例,我正在使用更大的模型。

如果您想为此使用Object.assign ,您可以将所有内容分配给一个最后列出this.addressModel的新对象:

this.addressModel = Object.assign({}, data, this.addressModel);

这样,当this.addressModel具有也在data属性时,它“获胜”。

了解我可以手动映射这些属性,但这是一个示例,我正在使用更大的模型。

模型的大小在这里并不重要,它是一个循环,无论它是在Object.assign还是在您的代码中。 代码中的循环类似于:

for (const [key, value] of Object.entries(data)) {
    if (!(key in this.addressModel)) { // Or `!this.addressModel.hasOwnProperty(key)` or `!Object.prototype.hasOwnProperty.call(this.addressModel, key)` depending on what you want to check and your style
        this.addressModel[key] = value;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM