所以我有两个对象数组,一个是人,另一个是这样的工作:
[
{
id: 1,
name: 'Daniel',
job: 146
},
{
id: 2,
name: 'Jose',
job: 163
}
]
和:
[
{
id: 146,
name: 'Developer'
},
{
id: 163,
name: 'DevOps'
}
]
我想获取一个人员数组,其中作业 id 被替换为整个作业对象本身,如下所示:
[
{
id: 1,
name: 'Daniel',
job: {
id: 146,
name: 'Developer'
},
},
{
id: 2,
name: 'Jose',
job: {
id: 163,
name: 'DevOps'
}
}
]
也许 lodash 不是最好的方法,但我没有其他想法。如果可以的话,请提供帮助,谢谢。
您可以使用.reduce()
从作业数组创建查找表(即:对象(,其中作业的 id 成为键,作业本身成为值。然后,您可以.map()
人员数组以包含之前创建的查找表中的job
值。
请参阅以下示例:
const people = [{id:1,name:"Daniel",job:146},{id:2,name:"Jose",job:163}];
const jobs = [{id:146,name:"Developer"},{id:163,name:"DevOps"}];
const lut = jobs.reduce((acc, job) => (acc[job.id] = job, acc), {});
const result = people.map(({job, ...person}) => ({...person, job: lut[job]}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用 Array.map 和 Array.find
var persons=[
{
id: 1,
name: 'Daniel',
job: 146
},
{
id: 2,
name: 'Jose',
job: 163
}
];
var jobs=[
{
id: 146,
name: 'Developer'
},
{
id: 163,
name: 'DevOps'
}
];
var retVal=persons.map(p=>{
return {...p,job:jobs.find(j=> j.id==p.job)};
})
console.log(retVal)