如何通过与id比较来合并三个不同的数组?在Angular 6中

Pha*_*evu 3 javascript typescript angular6

数组:

 array1 = [{id:1, name:"raju"},{id:2, name:"ravi"},{id:4, name:"john"},{id:6, name:"jack"}];
 array2= [{id:1, degree:"b.com"},{id:3, degree:"b.a"},{id:4, degree:"c.a"},{id:5, degree:"horticulture"}];
 array3= [{id:1, age:20},{id:3, age:21},{id:6, age:27},{id:7, age:25}];
Run Code Online (Sandbox Code Playgroud)

所需结果是:

resultarray = [
    {id:1, name: "raju", degree:"b.com",age:20},
    {id:2, name: "ravi"},
    {id:3, degree:"b.a", age:21},
    {id:4, name:"john", degree:"c.a"},
    {id:5, degree:"horticulture"},
    {id:6, name:"jack", age:27},
    {id:7, age:25}
 ] 
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的功能,并尝试了两个数组,但无法合并没有ID进行比较的对象。

Cod*_*iac 7

您可以使用减少和解构

这里的主意是

  • 首先将所有阵列合并到一个阵列中。
  • 现在使用reduce我们创建id为op对象的键
  • 如果id密钥已经存在,我们将inp和合并op[inp.id]
  • 如果id不存在,我们将创建一个具有值的新密钥 inp

let array1 = [{id:1, name:"raju"},{id:2, name:"ravi"},{id:4, name:"john"},{id:6, name:"jack"}];
let array2= [{id:1, degree:"b.com"},{id:3, degree:"b.a"},{id:4, degree:"c.a"},{id:5, degree:"horticulture"}];
let array3= [{id:1, age:20},{id:3, age:21},{id:6, age:27},{id:7, age:25}];

let temp = [...array1,...array2,...array3]

let op = temp.reduce((op,inp)=>{
  op[inp.id] = op[inp.id] || inp
  op[inp.id] = {...op[inp.id],...inp}
  return op
},{})

console.log(Object.values(op))
Run Code Online (Sandbox Code Playgroud)