如何将规范化 json 上的关系与 lodash 结合起来?



所以我有两个对象数组,一个是人,另一个是这样的工作:

[
{
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)

最新更新