代码之家  ›  专栏  ›  技术社区  ›  zilijonas

JSON扩展而不覆盖同名属性

  •  0
  • zilijonas  · 技术社区  · 6 年前

    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=对象.assign(obj1、obj2) -它覆盖了JSON文件,然后只剩下2个水果。

    当我尝试使用 obj3.data=对象.assign(obj1.data,obj2.data) -它不会改变任何事情。

    是的,{data:[]}在这里是必须的。

    如何扩展JSON对象而不覆盖它?

    另外,我这里用的是节点8。

    2 回复  |  直到 6 年前
        1
  •  3
  •   CertainPerformance    6 年前

    您需要显式地组合 data

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

    如果这两个对象中还有其他属性也要合并为 obj3 ,那么你可以 Object.assign 传递第三个物体 数据 :

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

    或者,更简洁地说,通过对象扩散:

    const obj3 = {
      ...obj1,
      ...obj2,
      data: [...obj1.data, ...obj2.data]
    };
    
        2
  •  1
  •   Telokis    6 年前

    concat 不起作用,因为 obj1 obj2 是数组。你需要和我一起做 data 像这样:

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