Javascript 如何通过比较id来合并三个不同的数组?角度6

Javascript 如何通过比较id来合并三个不同的数组?角度6,javascript,typescript,angular6,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

阵列:

要求的结果是:

 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}];
我尝试了不同的函数,尝试了两个数组,但无法合并没有id进行比较的对象。

您可以使用和

这是我的想法

  • 首先将所有数组合并到一个数组中
  • 现在使用reduce创建
    id
    作为
    op
    对象中的键
  • 如果
    id
    键已经存在,我们将
    inp
    op[inp.id]
  • 如果id不存在,我们将创建一个值为
    inp
let array1=[{id:1,名字:“raju”},{id:2,名字:“ravi”},{id:4,名字:“john”},{id:6,名字:“jack”}];
设array2=[{id:1,度:“b.com”},{id:3,度:“b.a”},{id:4,度:“c.a”},{id:5,度:“园艺”}];
设array3=[{id:1,age:20},{id:3,age:21},{id:6,age:27},{id:7,age:25}];
设温度=[…阵列1,…阵列2,…阵列3]
让op=温度降低((op,inp)=>{
op[inp.id]=op[inp.id]| | inp
op[inp.id]={…op[inp.id],…inp}
返回操作
},{})
console.log(Object.values(op))
可能的解决方案:

let array1=[{id:1,名字:“raju”},{id:2,名字:“ravi”},{id:4,名字:“john”},{id:6,名字:“jack”}];
设array2=[{id:1,度:“b.com”},{id:3,度:“b.a”},{id:4,度:“c.a”},{id:5,度:“园艺”}];
设array3=[{id:1,age:20},{id:3,age:21},{id:6,age:27},{id:7,age:25}];
让resp=[].concat(array1,array2,array3).reduce((acc,ele)=>{
设obj=acc.find(x=>x.id==ele.id);
return obj?(Object.keys(ele.forEach)(x=>obj[x]=ele[x]),acc:acc.concat(ele);
}, [])

console.log(resp)
有比这更好的解决方案,但这就是我尝试过的:

将3个阵列合并为一个:

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}
 ] 
循环遍历项目,然后将值放入“对象”

最终解决方案

let object = {}    
array.forEach((item) => {
    object[item.id] = { ...object[item.id],...item}})
对象变量将包含

result = Object.values(object)
结果变量将包含

object = { '1': { id: 1, age: 20, name: 'raju', degree: 'b.com' },
      '2': { id: 2, name: 'ravi' },
      '3': { id: 3, age: 21, degree: 'b.a' },
      '4': { id: 4, degree: 'c.a', name: 'john' },
      '5': { id: 5, degree: 'horticulture' },
      '6': { id: 6, age: 27, name: 'jack' },
      '7': { id: 7, age: 25 } }

哦,在我添加这个解决方案时,有两个人已经解决并发布了他们的答案:)我们可以将这个结果数组作为一个父id(另一个不同的id)的子id保留吗?是的,我们可以,它是一个对象列表。等待我会更新答案我的意思是会有一个像{UserID:201,Userrating:resultaray}这样的id,这里UserID是父项,Userrating是子项..hii,object.values和object.keys.还有其他选择吗。。因为这两个在IE11中不起作用。。如果不使用object.values&object.keys,是否还有其他方法可以获得此输出?我们是否可以将此结果数组作为一个父id(另一个不同id)的子id@PhaniKumarDevu我无法理解上面这一行的意思,您可以添加解释或一些示例吗?我的意思是,还会有一个id,如{UserID:201,Userrating:resultaray}这里UserID是父项,Userrating是子项..您只需将
Userrating
key的值设置为
output
我们得到的,
{UserID:201,Userrating:Object.values(op)}
类似this@PhaniKumarDevu您可以使用polyfill,我们是否可以将此结果数组作为一个父id(另一个不同id)的子id保留是的,你能详细说明一下你是如何决定哪一个是父的吗?我的意思是,还会有一个像{UserID:201,Userrating:resultaray}这样的id,这里UserID是父的,Userrating是子的..hii,object.values和object.keys.还有其他选择吗。。因为这两个在IE11中不起作用。。如果不使用object.values和object.keyshii,是否有其他方法获得此输出,object.values和object.keys是否有其他方法。。因为这两个在IE11中不起作用。。有没有其他方法可以在不使用object.values和object.keys的情况下获得此输出
object = { '1': { id: 1, age: 20, name: 'raju', degree: 'b.com' },
      '2': { id: 2, name: 'ravi' },
      '3': { id: 3, age: 21, degree: 'b.a' },
      '4': { id: 4, degree: 'c.a', name: 'john' },
      '5': { id: 5, degree: 'horticulture' },
      '6': { id: 6, age: 27, name: 'jack' },
      '7': { id: 7, age: 25 } }
result = [ { id: 1, age: 20, name: 'raju', degree: 'b.com' },
  { id: 2, name: 'ravi' },
  { id: 3, age: 21, degree: 'b.a' },
  { id: 4, degree: 'c.a', name: 'john' },
  { id: 5, degree: 'horticulture' },
  { id: 6, age: 27, name: 'jack' },
  { id: 7, age: 25 } ]