Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从另一个对象中忽略具有某些深度值的对象_Javascript_Node.js_Comparison_Javascript Objects - Fatal编程技术网

Javascript 从另一个对象中忽略具有某些深度值的对象

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": ""

在更新集合中的资源时,我试图省略req.body数据,其中只有空字段或集合中现有资源的字段

但这也可能是通用的,这就是为什么标题更通用

无论如何,想象一下:

我们的数据库中有一个用户,其数据如下:

{
  "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;