JSON 扩展而不覆盖同名属性

JSON extend without overwriting attributes with same name

我需要扩展我的 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。我在这里使用的是 Node 8。

您需要显式组合 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]
};

您的 concat 不起作用,因为 obj1obj2 都不是数组。你需要像这样用 data 来做:

const obj3 = {
    data: obj1.data.concat(obj2.data)
}