Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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/arrays/12.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/4/kotlin/3.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 我想根据两个数组的对象的id对它们进行并集_Javascript_Arrays - Fatal编程技术网

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中的对象替换的原因