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
不起作用,因为 obj1
和 obj2
都不是数组。你需要像这样用 data
来做:
const obj3 = {
data: obj1.data.concat(obj2.data)
}
我需要扩展我的 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
不起作用,因为 obj1
和 obj2
都不是数组。你需要像这样用 data
来做:
const obj3 = {
data: obj1.data.concat(obj2.data)
}