首页 > 解决方案 > 如何将规范化 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 不是最好的方法,但我没有其他想法。如果可以,请提供帮助,谢谢。

标签: javascriptangularreduxlodashngrx

解决方案


您可以从作业数组中创建一个查找表(即:对象),.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; }


推荐阅读