Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 合并数组JS中的相应对象_Javascript_Arrays_Object - Fatal编程技术网

Javascript 合并数组JS中的相应对象

Javascript 合并数组JS中的相应对象,javascript,arrays,object,Javascript,Arrays,Object,如何合并两个对象数组,其中一个数组中的一个对象与另一个数组中的一个对象相对应。应保留不对应的对象id和uid是相应的条件 const data1=[{ id:1, someKey1:“someValue2” }, { id:2, someKey2:“someValue2” }, { id:3, someKey3:“someValue3” }] 常数数据2=[{ uid:1, someKey4:“someValue4” }, { uid:2, someKey5:“someValue5” }] //

如何合并两个对象数组,其中一个数组中的一个对象与另一个数组中的一个对象相对应。应保留不对应的对象
id
uid
是相应的条件

const data1=[{
id:1,
someKey1:“someValue2”
}, {
id:2,
someKey2:“someValue2”
}, {
id:3,
someKey3:“someValue3”
}]
常数数据2=[{
uid:1,
someKey4:“someValue4”
}, {
uid:2,
someKey5:“someValue5”
}]
//预期结果:
[{
someKey1:‘someValue2’,
someKey4:“someValue4”
}, {
someKey2:'someValue2',
someKey5:‘someValue5’,
{
id:3,
someKey3:“someValue3”
}
}]

您可以从两组数组中获取所有ID和UID,并将它们放入一个集合,然后将该集合转换回一个数组,以获得唯一ID/UID的列表。然后,可以为两个阵列创建贴图。映射ID/UID以保存其相应的对象属性。使用id/UID的唯一数组,您可以将每个id
.map()
映射到
映射中保存的相应对象,如下所示:

const data1=[{id:1,someKey1:'someValue2'},{id:2,someKey2:'someValue2'},{id:3,someKey3:'someValue3'}]
constdata2=[{uid:1,someKey4:'someValue4'},{uid:2,someKey5:'someValue5'}];
const getMap=(arr,id)=>newmap(arr.Map(({[id]:{uid,…r})=>[[uid,{…r}]);
const id=[…新集合(data1.map(({id})=>id).concat(data2.map({uid}=>uid)));
const data1Map=getMap(data1,'id');
constdata2map=getMap(data2,'uid');
const result=ids.map(id=>({…(data1Map.get(id)|{}),…(data2Map.get(id)|{}));

控制台日志(结果)您可以从两组数组中获取所有ID和UID,并将它们放入一个集合中,然后将该集合转换回一个数组,以获得唯一ID/UID的列表。然后,可以为两个阵列创建贴图。映射ID/UID以保存其相应的对象属性。使用id/UID的唯一数组,您可以将每个id
.map()
映射到
映射中保存的相应对象,如下所示:

const data1=[{id:1,someKey1:'someValue2'},{id:2,someKey2:'someValue2'},{id:3,someKey3:'someValue3'}]
constdata2=[{uid:1,someKey4:'someValue4'},{uid:2,someKey5:'someValue5'}];
const getMap=(arr,id)=>newmap(arr.Map(({[id]:{uid,…r})=>[[uid,{…r}]);
const id=[…新集合(data1.map(({id})=>id).concat(data2.map({uid}=>uid)));
const data1Map=getMap(data1,'id');
constdata2map=getMap(data2,'uid');
const result=ids.map(id=>({…(data1Map.get(id)|{}),…(data2Map.get(id)|{}));

控制台日志(结果)
您可以创建一个函数来迭代数据数组,并将其对象放入一个新数组中,其中索引是
id
uid

const data1=[{id:1,someKey1:'someValue2'},{id:2,someKey2:'someValue2'},{id:3,someKey3:'someValue3'}]
const data2=[{uid:1,someKey4:'someValue4'},{uid:2,someKey5:'someValue5'}]
让结果=[];
结果=合并结果(结果,数据1,“id”);
结果=合并结果(结果,数据2,“uid”);
log(JSON.stringify(result));
函数mergeIntoResult(结果数组、数据数组、idProperty){
返回dataArray.reduce((acc,curr)=>{
常数指数=当前[idProperty];
acc[index]=acc[index]| |{};//获取现有对象或创建默认值
acc[index]={…acc[index],…curr};//插入对象数据
删除acc[index][idProperty];//从新对象中删除“id”或“uid”字段
返回acc;
}(结果射线);

}
您可以创建一个函数来迭代数据数组,并将其对象放入一个新数组中,其中索引是
id
uid

const data1=[{id:1,someKey1:'someValue2'},{id:2,someKey2:'someValue2'},{id:3,someKey3:'someValue3'}]
const data2=[{uid:1,someKey4:'someValue4'},{uid:2,someKey5:'someValue5'}]
让结果=[];
结果=合并结果(结果,数据1,“id”);
结果=合并结果(结果,数据2,“uid”);
log(JSON.stringify(result));
函数mergeIntoResult(结果数组、数据数组、idProperty){
返回dataArray.reduce((acc,curr)=>{
常数指数=当前[idProperty];
acc[index]=acc[index]| |{};//获取现有对象或创建默认值
acc[index]={…acc[index],…curr};//插入对象数据
删除acc[index][idProperty];//从新对象中删除“id”或“uid”字段
返回acc;
}(结果射线);
}
尝试以下代码:

让数据1=[{
id:1,
someKey1:“someValue2”
}, {
id:2,
someKey2:“someValue2”
}, {
id:3,
someKey3:“someValue3”
}]
让数据2=[{
uid:1,
someKey4:“someValue4”
}, {
uid:2,
someKey5:“someValue5”
}]
让结果=[];
数据1.forEach((obj,i)=>{
const targetValues=data2.filter(x=>x.uid==obj.id);
结果[i]=obj;
if(targetValues&&targetValues.length){
删除obj.id;
targetValues.forEach(值=>{
删除value.uid;
结果[i]={…结果[i],…值};
})
data2=data2.filter(x=>x.uid!==obj.id);
}
});
结果=result.concat(数据2);
控制台日志(结果)请尝试以下代码:

让数据1=[{
id:1,
someKey1:“someValue2”
}, {
id:2,
someKey2:“someValue2”
}, {
id:3,
someKey3:“someValue3”
}]
让数据2=[{
uid:1,
someKey4:“someValue4”
}, {
uid:2,
someKey5:“someValue5”
}]
让结果=[];
数据1.forEach((obj,i)=>{
const targetValues=data2.filter(x=>x.uid==obj.id);
结果[i]=obj;
if(targetValues&&targetValues.length){
删除obj.id;
targetValues.forEach(值=>{
删除value.uid;
结果[i]={…结果[i],…值};
})
data2=data2.filter(x=>x.uid!==obj.id);
}
});
结果=result.concat(数据2);

控制台日志(结果)这里有另一种方法,它不是pe
const createObj = (fooObj, keyToFilter) => {
  if (fooObj)
    return Object.fromEntries(Object.entries(fooObj).filter(([k, v])=> k != keyToFilter ));
  return null;
}    

const result = data1.map(s=> ({...createObj(s,'id'), ...createObj(maps.get(s.id),'uid')}));