Опустить объект с определенными глубокими значениями из другого объекта - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь опустить данные 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 ("")
}

Я использую mongoose, но я бы предпочел реализовать это на базовом уровне объектов javascript

1 Ответ

1 голос
/ 21 мая 2019

Я не знаю ни одной библиотеки, но ниже приведен рабочий пример использования рекурсии.

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);

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...