Javascript 在匹配2个数组的内容后,将其合并到新数组中

Javascript 在匹配2个数组的内容后,将其合并到新数组中,javascript,Javascript,我有两个数组,我想要一个新数组,它基于这两个数组的内容匹配的条件 arr1=[{ 文件包id:“aabbccdd”, 级别:2 }, { 包id:'xycd21', 级别:3 } ] arr2=[{ 文件包id:“aabbccdd”, 级别:1 }, { 包id:'zcb21', 级别:5 }] 合并Darray=[{ 文件包id:“aabbccdd”, arr1Level:2, ARR2级别:1 }, { 包id:'xycd21', arr1Level:3, arr2级别:0 }, { 包id

我有两个数组,我想要一个新数组,它基于这两个数组的内容匹配的条件

arr1=[{
文件包id:“aabbccdd”,
级别:2
},
{
包id:'xycd21',
级别:3
}
]
arr2=[{
文件包id:“aabbccdd”,
级别:1
},
{
包id:'zcb21',
级别:5
}]
合并Darray=[{
文件包id:“aabbccdd”,
arr1Level:2,
ARR2级别:1
},
{
包id:'xycd21',
arr1Level:3,
arr2级别:0
},
{
包id:'zcb21',
arr1级别:0,
ARR2级别:5
}]
因此,如果要在两个数组中检查package_id。若在任意一个数组中找到,新数组将推送一个元素,其中来自两个数组的级别与包的id相对应


我就是想不出这样做的逻辑。如果lodash可以做到这一点,请告诉我。

您可以像我在这里做的那样使用循环轻松解决此问题:

var arr1=[{
文件包id:“aabbccdd”,
级别:2
},
{
包id:'xycd21',
级别:3
}
];
var arr2=[{
文件包id:“aabbccdd”,
级别:1
},
{
包id:'zcb21',
级别:5
}
];
var mergedArr=[];
var tempObj={};
对于(变量i=0;iconsole.log(mergedArr)您可以像我在这里做的那样使用循环轻松解决此问题:

var arr1=[{
文件包id:“aabbccdd”,
级别:2
},
{
包id:'xycd21',
级别:3
}
];
var arr2=[{
文件包id:“aabbccdd”,
级别:1
},
{
包id:'zcb21',
级别:5
}
];
var mergedArr=[];
var tempObj={};
对于(变量i=0;iconsole.log(mergedArr)
您可以先将两个数组添加到一个数组中,然后使用
reduce()
forEach()
创建新的对象数组。您还可以使用另一个对象按
package\u id

var arr1=[{package_id:'aabbccdd',级别:2},{package_id:'xycd21',级别:3}];
var arr2=[{package_id:'aabbccdd',级别:1},{package_id:'zcb21',级别:5}];
var o={}
变量数组=[arr1,arr2]
var keys=Array.from(Array(arrays.length),(e,i)=>({['arr'+(i+1)+'Level']:0}))
var result=arrays.reduce(函数(r,a,i){
a、 forEach(函数(e){
如果(!o[e.package_id]){
o[e.package_id]=Object.assign({},{package_id:e.package_id},…键)
r、 推送(o[e.包装标识]);
}
o[e.package_id]['arr'+(i+1)+'Level']=e.Level;
})
返回r;
}, [])

console.log(result)
您可以先将两个数组添加到一个数组中,然后使用
reduce()
forEach()
创建新的对象数组。您还可以使用另一个对象按
package\u id

var arr1=[{package_id:'aabbccdd',级别:2},{package_id:'xycd21',级别:3}];
var arr2=[{package_id:'aabbccdd',级别:1},{package_id:'zcb21',级别:5}];
var o={}
变量数组=[arr1,arr2]
var keys=Array.from(Array(arrays.length),(e,i)=>({['arr'+(i+1)+'Level']:0}))
var result=arrays.reduce(函数(r,a,i){
a、 forEach(函数(e){
如果(!o[e.package_id]){
o[e.package_id]=Object.assign({},{package_id:e.package_id},…键)
r、 推送(o[e.包装标识]);
}
o[e.package_id]['arr'+(i+1)+'Level']=e.Level;
})
返回r;
}, [])

log(result)
您可以使用一种结构方法,为不同的数组使用动态键,并将这些键用作生成默认值的帮助

var arr1=[{package_id:'aabbccdd',级别:2},{package_id:'xycd21',级别:3}],
arr2=[{package_id:'aabbccdd',级别:1},{package_id:'zcb21',级别:5}],
keys=[{level:'arr1level'},{level:'arr2level'}],
结果=[arr1,arr2].reduce(函数(散列){
返回函数(r、a、i){
a、 forEach(函数(b){
if(!hash[b.package\u id]){
hash[b.package\u id]={package\u id:b.package\u id},
r、 push(散列[b.package_id]);
}
键。forEach(功能(键){
Object.keys(key.forEach)函数(k){
散列[b.package_id][key[k]]=0;
});
});
对象。键(b)。forEach(函数(k){
var key=key[i][k]| | k;
散列[b.package_id][key]=b[k];
});
});
返回r;
};
}(Object.create(null)),[]);
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您可以使用