Javascript 从另一个对象中忽略具有某些深度值的对象
在更新集合中的资源时,我试图省略req.body数据,其中只有空字段或集合中现有资源的字段 但这也可能是通用的,这就是为什么标题更通用 无论如何,想象一下: 我们的数据库中有一个用户,其数据如下:Javascript 从另一个对象中忽略具有某些深度值的对象,javascript,node.js,comparison,javascript-objects,Javascript,Node.js,Comparison,Javascript Objects,在更新集合中的资源时,我试图省略req.body数据,其中只有空字段或集合中现有资源的字段 但这也可能是通用的,这就是为什么标题更通用 无论如何,想象一下: 我们的数据库中有一个用户,其数据如下: { "firstName": "John", "lastName": "Doe", "address": { "Address1": "Random street 1", "City": "", "Country": null }, "email": ""
{
"firstName": "John",
"lastName": "Doe",
"address": {
"Address1": "Random street 1",
"City": "",
"Country": null
},
"email": ""
}
{
"firstName": "Mark",
"address": {
"Address1": "Random street 2",
"City": "NY",
"Country": "USA"
},
"email": "john.doe@mail.com"
}
用户正在尝试使用以下数据更新现有资源:
{
"firstName": "John",
"lastName": "Doe",
"address": {
"Address1": "Random street 1",
"City": "",
"Country": null
},
"email": ""
}
{
"firstName": "Mark",
"address": {
"Address1": "Random street 2",
"City": "NY",
"Country": "USA"
},
"email": "john.doe@mail.com"
}
更新的对象应如下所示:
{
"firstName": "John", // Unchanged because propety value already exists
"lastName": "Doe",
"address": {
"Address1": "Random street 1", // Unchanged because propety value already exists
"City": "NY", // Updated because existing value is empty ("")
"Country": "USA" // Updated because existing value is null
},
"email": "john.doe@mail.com" // Updated because existing value is empty ("")
}
我使用的是mongoose,但我更愿意在基本的javascript对象级别实现它我不知道有任何库,但下面是使用递归的工作示例 var oldObj={ 名字:约翰, 姓:Doe,, 地址:{ 地址1:随机街1号, 城市:, 国家:空 }, 电邮: } var newObj={ 名字:马克, 地址:{ 地址1:随机街2号, 城市:纽约, 国家:美国 }, 电子邮件:约翰。doe@mail.com } 更新bjectoldobj,newObj; 函数更新bjectoldobj,newObj{ Object.keysoldObj.forEach键=>{ 如果oldObj[key]&&typeof oldObj[key]=“object”{ updateObjectoldObj[key],newObj[key]; }否则{ oldObj[key]=oldObj[key]| | newObj[key]; } }; } console.logModified Obj:,oldObj;