【问题标题】:Omit an object with certain deep values from another object从另一个对象中省略具有某些深度值的对象
【发布时间】:2019-05-17 12:56:46
【问题描述】:

在更新集合中的资源时,我尝试省略 req.body 数据,仅包含集合中现有资源的 null'' 字段。

但这也可能是通用的,这就是标题更通用的原因。

无论如何,想象一下:

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

{
  "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 ("")
}

我正在使用猫鼬,但我宁愿在基本的 javascript 对象级别上实现它

【问题讨论】:

    标签: javascript node.js comparison javascript-objects


    【解决方案1】:

    我不知道有任何库,但下面是使用递归的工作示例。

    var oldObj = {
      "firstName": "John",
      "lastName": "Doe",
      "address": {
        "Address1": "Random street 1",
        "City": "",
        "Country": null
      },
      "email": ""
    }
    
    var newObj = {
      "firstName": "Mark",
      "address": {
        "Address1": "Random street 2",
        "City": "NY",
        "Country": "USA"
      },
      "email": "john.doe@mail.com"
    }
    
    updateObject(oldObj, newObj);
    
    
    function updateObject(oldObj, newObj) {
      Object.keys(oldObj).forEach( key => {
        if (oldObj[key] && typeof oldObj[key] === 'object') {
          updateObject(oldObj[key], newObj[key]);
        } else {
          oldObj[key] = oldObj[key] || newObj[key];
        }
      });
    }
    
    console.log("Modified Obj: ", oldObj);

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-07-23
      • 2018-04-14
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多