我需要扩展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。
答案 0 :(得分:3)
您需要显式组合data
数组来做到这一点:
const obj3 = { data: [...obj1.data, ...obj2.data] };
如果您还希望将两个对象合并成obj3
的其他属性,则可以Object.assign
并传递由合并的data
组成的第三个对象:< / p>
const obj3 = Object.assign({}, obj1, obj2, { data: [...obj1.data, ...obj2.data] });
或更简洁地说,对象传播:
const obj3 = {
...obj1,
...obj2,
data: [...obj1.data, ...obj2.data]
};
答案 1 :(得分:1)
您的$result = ['one' => ['two' => ['free' => 10]]];
不起作用,因为concat
和obj1
都不是数组。您需要使用obj2
来做到这一点,
data