Javascript 我想根据两个数组的对象的id对它们进行并集
假设我有两个数组Javascript 我想根据两个数组的对象的id对它们进行并集,javascript,arrays,Javascript,Arrays,假设我有两个数组 let array1=[{id:1,名称:“a”},{id:2,名称:“b”}] 设array2=[{id:1,名称:'c'},{id:3,名称:'d'}] 我希望得到的数组是这样的 let result = [{id: 1,name: 'c'},{id: 2,name: 'b'},{id: 3,name: 'd'}] 因此,如果第二个数组有一个对象,而第一个数组也有一个id相同的对象,那么用第二个数组对象替换第一个对象。 目前,我已经尝试了下面的代码,但它会检查每个要匹配
let array1=[{id:1,名称:“a”},{id:2,名称:“b”}]
设array2=[{id:1,名称:'c'},{id:3,名称:'d'}]
我希望得到的数组是这样的
let result = [{id: 1,name: 'c'},{id: 2,name: 'b'},{id: 3,name: 'd'}]
因此,如果第二个数组有一个对象,而第一个数组也有一个id相同的对象,那么用第二个数组对象替换第一个对象。
目前,我已经尝试了下面的代码,但它会检查每个要匹配的值,我只想基于id进行匹配
const uniqueArray = this.servicesdata.filter((item, index) => {
const _item = JSON.stringify(item);
return (
index ===
this.servicesdata.findIndex(obj => {
return JSON.stringify(obj) === _item;
})
);
});
console.log(uniqueArray);
这里有一个O(NlogN)
方法
let array1=[{id:1,name:“a”},{id:2,name:“b”}]//假设它的大小是N1
让array2=[{id:1,name'c'},{id:3,name'd'}]//假设它的大小是N2
let duplicate=new Set()//检查重复元素的集合
让结果=数组2
数组2.forEach((项)=>{//O(N2logN2)
重复。添加(项目id);
})
数组1.forEach((项)=>{//O(N1logN2)
//若“duplicate”并没有“item.id”,这意味着它在array1中是唯一的,所以将其添加到结果中
//否则,跳过它,因为对于重复项,我们需要array2的值
如果(!duplicate.has(item.id))
结果:推送(项目);
})
//方法的总体复杂度-O(N2logN2)+O(N1logN2)==>O(NlogN)
控制台日志(结果);
输出:
[ { id: 1, name: 'c' },
{ id: 3, name: 'd' },
{ id: 2, name: 'b' } ]
使用lodash,您可以使用:
let array1=[{id:1,名称:“a”},{id:2,名称:“b”}]
设array2=[{id:1,名称:'c'},{id:3,名称:'d'}]
console.log(u.unionBy(array2,array1,'id'))
1)请向我们展示您迄今为止为实现这一目标所做的努力。2) 为什么在结果中没有名为的对象:a
,因为名为:a的对象和名为:c的对象具有相同的id,这就是为什么它将被数组2中的对象替换的原因