Расширение JSON без перезаписи атрибутов с тем же именем - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно расширить мои данные JSON. Теперь у меня есть два объекта:

const obj1 = {
   "data": [
      {
         "fruit num": 1,
         "kind": "sweet"
      },
      {
         "fruit num": 2,
         "kind": "sour"
      }
   ]
}

const obj2 = {
   "data": [
      {
         "fruit num": 3,
         "kind": "bitter"
      },
      {
         "fruit num": 4,
         "kind": "bitter"
      }
   ]
}

Что мне нужно сделать, это сделать файл obj3, который бы выглядел так:

const obj3 = {
   "data": [
      {
         "fruit num": 1,
         "kind": "sweet"
      },
      {
         "fruit num": 2,
         "kind": "sour"
      },
      {
         "fruit num": 3,
         "kind": "bitter"
      },
      {
         "fruit num": 4,
         "kind": "bitter"
      }
   ]
}

Когда я пытаюсь использовать obj3 = obj1.concat (obj2) - он говорит, что такой функции нет.

Когда я пытаюсь использовать obj3 = Object.assign (obj1, obj2) - он перезаписывает файл JSON, и тогда остается только 2 плода.

Когда я пытаюсь использовать obj3.data = Object.assign (obj1.data, obj2.data) - это ничего не меняет.

И да, {data: []} здесь обязательно.

Как расширить объект JSON, не перезаписывая его?

P.S. Я использую Узел 8 здесь.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Ваш concat не работает, потому что ни obj1, ни obj2 не являются массивами. Вам нужно сделать это с data примерно так:

const obj3 = {
    data: obj1.data.concat(obj2.data)
}
0 голосов
/ 12 сентября 2018

Вам нужно явно объединить массивы data, чтобы сделать это:

const obj3 = { data: [...obj1.data, ...obj2.data] };

Если в двух объектах есть и другие свойства, которые вы также хотите объединить в obj3, тогда вы можете Object.assign и передать третий объект, состоящий из объединенных data:

const obj3 = Object.assign({}, obj1, obj2, { data: [...obj1.data, ...obj2.data] });

Или, точнее, с распространением объекта:

const obj3 = {
  ...obj1,
  ...obj2,
  data: [...obj1.data, ...obj2.data]
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...