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

我有一个像这样的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;
    }
}

08-19 07:07