我有 2个不同的Java脚本数组/对象,但是具有匹配的ID 。我想将它们合并为一个新对象。因此,主要对象数据和次要对象中的任何匹配元素都将合并为合并结果。
我尝试使用Object.assign()
函数,但没有成功。
示例代码,所以我有2个单独的对象( main 和 lines ):
let main = [
{
"Id": "1",
"Name": "Testing data"
}
]
let lines = [
{
"OtherId": "1",
"code": "AU-29830"
},
{
"OtherId": "1",
"code": "AU-29854-Single"
},
{
"OtherId": "1",
"code": "TV-BB21084623"
},
{
"OtherId": "2",
"code": "Don't Merge"
},
{
"OtherId": "3",
"code": "Don't Merge"
}
]
我想合并这两个数组,以便输出应为包含合并 主对象的单个数组。此合并的主要对象应该包含其自身的原始内容,并嵌套过滤的 次要数组(仅包含匹配对象 >)。过滤是通过主数组对象的 id 完成的,该对象必须与的每个对象相匹配(稍有偏离 id) >第二数组。
结果数组应如下所示:
let result = [
{
"Id": "1",
"Name": "Testing data",
"lines": [
{
"OtherId": "1",
"ProductCode": "AU-29830"
},
{
"OtherId": "1",
"ProductCode": "AU-29854-Single"
},
{
"OtherId": "1",
"ProductCode": "TV-BB21084623"
}
]
}
]
答案 0 :(得分:1)
由于您的main
是一个数组,所以我假设您最终可能会在其中包含多个主要项目。如果是这样,这是将line
个项目合并到每个项目中的一种方法:
const mergedMainItems =
main.map(mainItem=>({
...mainItem,
lines: lines.filter(line=>mainItem["Id"] === line["OtherId"])
}))
答案 1 :(得分:0)
我认为在此示例中,它将起作用:
let result = [];
result.push({...main[0]}); //or even result.push(main[0])
result[0].lines = [];
for(let l in lines){
if(lines[l].code != "Don't Merge"){
result[0].lines.push({OtherId: lines[l].OtherId, ProductCode: lines[l].code})
}
}