Javascript 通过按相同id添加对象值,同时添加唯一id,合并两个对象数组
我有一个工作函数,它在三种情况下合并两个长度不同的对象数组(源>目标):Javascript 通过按相同id添加对象值,同时添加唯一id,合并两个对象数组,javascript,arrays,array-merge,Javascript,Arrays,Array Merge,我有一个工作函数,它在三种情况下合并两个长度不同的对象数组(源>目标): 包括目标阵列中具有唯一id的对象 包括源阵列中具有唯一id的对象 通过从源值中减去目标值,包括具有重复ID的对象 我的问题是,我如何才能将此代码更改为更精简、更高效的代码? 只要看一下代码,就好像需要很多计算资源 我试图对数组进行concat并通过while循环运行它们,但无法找出区分哪个对象属于哪个数组的方法 让目标=[ {id:1,x:50}, {id:2,x:30}, {id:3,x:30} ]; 让源=[ {id
让目标=[
{id:1,x:50},
{id:2,x:30},
{id:3,x:30}
];
让源=[
{id:1,x:30},
{id:2,x:13},
{id:4,x:100},
{id:5,x:5}
];
设arrayResult=[];
函数计算(目标、源){
for(设i=0;id.id==srcObj.id)
if(tarObj){
让结果={
id:srcObj.id,
x:srcObj.x-tarObj.x
}
arrayResult.push(结果);
}否则{
arrayResult.push(srcObj);
}
}
for(设i=0;id.id==src.id);
如果(!焦油){
arrayResult.push(src)
}
}
}
计算(目标、源);
console.log(arrayResult)
您可以通过在source
中生成一个数组映射id
值到它们在数组中的索引来提高效率。然后您可以迭代target
,检查每个对象id
值是否在srcids
数组中有条目,如果有,则更新相应的source
x
值,否则将对象推入源
数组:
让目标=[
{id:1,x:50},
{id:2,x:30},
{id:3,x:30}
];
让源=[
{id:1,x:30},
{id:2,x:13},
{id:4,x:100},
{id:5,x:5}
];
const srcids=source.reduce((c,o,i)=>{
c[o.id]=i;
返回c;
}, []);
target.forEach(o=>{
if(srcids[o.id]!==未定义){
源[srcids[o.id]].x-=o.x;
}否则{
源推送(o);
}
});
console.log(源代码)
您可以通过在source
中生成一个数组映射id
值到它们在数组中的索引来提高效率。然后您可以迭代target
,检查每个对象id
值是否在srcids
数组中有条目,如果有,则更新相应的source
x
值,否则将对象推入源
数组:
让目标=[
{id:1,x:50},
{id:2,x:30},
{id:3,x:30}
];
让源=[
{id:1,x:30},
{id:2,x:13},
{id:4,x:100},
{id:5,x:5}
];
const srcids=source.reduce((c,o,i)=>{
c[o.id]=i;
返回c;
}, []);
target.forEach(o=>{
if(srcids[o.id]!==未定义){
源[srcids[o.id]].x-=o.x;
}否则{
源推送(o);
}
});
console.log(源代码);
Wow Nick。打开了我对数组的新视角:-)Wow Nick。让我看到了阵列的新视角:-)