Как объединить первичный объект с дочерними объектами, используя ссылку ID в Parent для каждого дочернего объекта - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть основная родительская коллекция (Проекты) и 2 дочерние коллекции, хранящиеся в виде массивов с объектами.

Проекты

const projects = {
  items: [
    {
      name: "Logo and Branding for Iron Kettle",
      skills: [
        "579b150756ea2dba79c1f09f",
        "579b150756ea2dba79c1f062"
      ],
      solutions: [
        "579b150756ea2dba79c1f09e",
        "579b150756ea2dba79c1f077"
      ],
      _cid: "579b150756ea2dba79c1efcb",
      _id: "579b150756ea2dba79c1f0af"
    },
    {
      name: "Snow shoot for media company",
      skills: [
        "579b150756ea2dba79c1f072",
        "579b150756ea2dba79c1f062"
      ],
      solutions": [
        "579b150756ea2dba79c1f09e",
        "579b150756ea2dba79c1f071",
      ],
      _cid: "579b150756ea2dba79c1efcb",
      _id: "579b150756ea2dba79c1f06a"
    }
  ],
  count: 12,
  limit: 100,
  offset: 0,
  total: 12
};

Навыки

const skills = {
  items: [
    {
      name: "Logo Design",
      _cid: "579b150756ea2dba79c1efdf",
      _id: "579b150756ea2dba79c1f09f"
    },
    {
      name: "Brand Research",
      _cid: "579b150756ea2dba79c1efdf",
      _id: "579b150756ea2dba79c1f072"
    },
    {
      name: "Graphic Design",
      _cid: "579b150756ea2dba79c1efdf",
      _id: "579b150756ea2dba79c1f062"
    }
  ],
  count: 13,
  limit: 100,
  offset: 0,
  total: 13
};

Решения

const solutions = {
  items: [
    {
      name: "Location research",
      _cid: "579b150756ea2dba79c1eff3",
      _id: "579b150756ea2dba79c1f09e"
    },
    {
      name: "Complete photo shoot",
      _cid: "579b150756ea2dba79c1eff3",
      _id: "579b150756ea2dba79c1f071"
    },
    {
      name: "Competition Analysis",
      _cid: "579b150756ea2dba79c1eff3",
      _id: "579b150756ea2dba79c1f077"
    }
  ],
  count: 19,
  limit: 100,
  offset: 0,
  total: 19
};

Мне нужно вернуть новый массив проектов с идентификаторами навыков и решений, заполненными актуальным объектом из соответствующего массива.

Это будет конечный результат одного элемента нового массива .

{
  name: "Logo and Branding for Iron Kettle",
  skills: [
    {
        name: "Logo Design",
        _cid: "579b150756ea2dba79c1efdf",
        _id: "579b150756ea2dba79c1f09f"
    },
    {
      name: "Graphic Design",
      _cid: "579b150756ea2dba79c1efdf",
      _id: "579b150756ea2dba79c1f062"
    }
  ],
  solutions: [
    {
      name: "Location research",
      _cid: "579b150756ea2dba79c1eff3",
      _id: "579b150756ea2dba79c1f09e"
    },
    {
      name: "Competition Analysis",
      _cid: "579b150756ea2dba79c1eff3",
      _id: "579b150756ea2dba79c1f077"
    }
  ],
  _cid: "579b150756ea2dba79c1efcb",
  _id: "579b150756ea2dba79c1f0af"
},

1 Ответ

2 голосов
/ 10 февраля 2020

Попробуйте что-то вроде этого:

projects.items.map(i => ({
    ...i,
    skills: i.skills.map(s => skills.items.find(skill => skill._id === s)),
    solutions: i.solutions.map(s => solutions.items.find(solution => solution._id === s))
}));
...