Javascript 通过对象属性映射两个长度相等的数组

Javascript 通过对象属性映射两个长度相等的数组,javascript,arrays,object,jsobject,Javascript,Arrays,Object,Jsobject,我有两个阵列: 阵列1: [ { name: 'Bob', traits: { id: 1 } }, { name: 'Karl', traits: { id: 2 } }, { name: 'Joseph', traits: { id: 3 } }

我有两个阵列:

阵列1:

[
    {
        name: 'Bob',
        traits: {
            id: 1
        }
    }, {
        name: 'Karl',
        traits: {
            id: 2
        }
    }, {
        name: 'Joseph',
        traits: {
            id: 3
        }
    }
]
阵列2:

[
    {
        name: 'Karl',
        user_id: 2,
        dog: 'Rottweiler'
    }, {
        name: 'Joseph',
        user_id: 3,
        dog: 'Poodle'
    }, {
        name: 'Bob',
        user_id: 1,
        dog: 'Puppy'
    }
]
预期结果:

我希望能够通过查找user_id与id匹配的元素,然后将对象添加到数组中,从而将第二个数组合并到第一个数组中

例如:

阵列1 obj

{
    name: 'Bob',
    traits: {
        id: 1
    }
}
由于id与数组2 obj用户id匹配:

{
    name: 'Bob',
    user_id: 1,
    dog: 'Puppy'
}

最终结果将是:

{
    name: 'Bob',
    traits: {
        name: 'Bob',
        user_id: 1,
        dog: 'Puppy'
    }
}

将第二个数组转换为由
user\u id
键入的映射,然后迭代第一个数组。在地图中找到对应的对象,并将匹配的对象值扩展到
traits
属性中:

让arr1=[{name:'Bob',traits:{id:1}},{name:'Karl',traits:{id:2},{name:'Joseph',traits:{id:3}}];
让arr2=[{name:'Karl',user_id:2,dog:'rotweiler'},{name:'Joseph',user_id:3,dog:'Poodle'},{name:'Bob',user_id:1,dog:'Puppy'}];
让map=newmap(arr2.map(item=>[item.user_id,item]);
让结果=arr1.map(项=>{
让traits=map.get(item.traits.id);
返回特征?{…项,特征}:项;
});

控制台日志(结果)您可以使用和轻松实现此结果。只需映射第一个数组,并在
arr2
中找到具有
obj.traits.id
的元素。然后返回所需的结果

const arr1=[
{
姓名:“鲍勃”,
特点:{
id:1,
},
},
{
姓名:“卡尔”,
特点:{
id:2,
},
},
{
姓名:“约瑟夫”,
特点:{
id:3,
},
},
];
常数arr2=[
{
姓名:“卡尔”,
用户id:2,
狗:“罗威犬”,
},
{
姓名:“约瑟夫”,
用户id:3,
狗:“狮子狗”,
},
{
姓名:“鲍勃”,
用户id:1,
狗:“小狗”,
},
];
const result=arr1.map((obj)=>{
const{name,traits}=obj;
const isExist=arr2.find((o)=>o.user\u id==traits.id);
如果(存在){
返回{name,traits:{…isExist}};
}
返回obj;
});
控制台日志(结果)
arr2.forEach((obj)=>{
const idx=arr1.findIndex((o)=>o.traits.id==obj.user\u id);
如果(idx!=-1){
arr1[idx]={…arr1[idx],特征:{…obj}
}
})
log(arr1[0])/{name:'Bob',traits:{name:'Bob',user_id:1,dog:'Puppy'}}
a=[
{
姓名:'鲍勃',
特点:{
身份证号码:1
}
}, {
姓名:'卡尔',
特点:{
身份证号码:2
}
}, {
姓名:'约瑟夫',
特点:{
身份证号码:3
}
}
];
设b=[
{
姓名:'卡尔',
用户id:2,
狗:“罗威纳”
}, {
姓名:'约瑟夫',
用户id:3,
狗:“狮子狗”
}, {
姓名:'鲍勃',
用户id:1,
狗:“小狗”
}
];
a、 地图(aobj=>{
让sameIdObj=b.find(bobj=>bobj.user_id==aobj.traits.id)
sameIdObj&(aobj.traits=sameIdObj)
})
控制台日志(a)