我想要的
我有2不同的Java脚本数组/对象,但与匹配的Ids。我想把它们合并成一个新的对象。因此,主对象数据和来自次要对象的任何匹配元素都被合并到一个组合结果中。
我试过的
我试过使用Object.assign()函数,但没有成功。
给定输入
示例代码,因此我有两个单独的对象(主对象和行):
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"
}
]
}
]发布于 2019-07-02 20:00:42
因为您的main是一个数组,所以我假设您可能会在其中有多个主项。如果是这样的话,下面有一种方法可以将line项合并到每个条目上:
const mergedMainItems =
main.map(mainItem=>({
...mainItem,
lines: lines.filter(line=>mainItem["Id"] === line["OtherId"])
}))发布于 2019-07-02 19:48:38
对于这个例子,我认为这是可行的:
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})
}
}https://stackoverflow.com/questions/56859064
复制相似问题