Как добавить массив с атрибутом «a» в другой с помощью attr. 'b' на основе атрибутов третьего массива с атрибутом attr. ['a', 'b'] - PullRequest
0 голосов
/ 13 мая 2019

У меня есть 3 массива следующим образом:

 Categories:

    0: {id: "123", name: "Cat 1"},
    1: {id: "456", name: "Cat 2"},
    2: {id: "789", name: "Cat 3"}


    Account Category:

    0: {categoryId: "123", supportId:"john@gmail.com" },
    1: {categoryId: "456", supportId:"john@gmail.com" },
    2: {categoryId: "789", supportId:"sherlock@gmail.com" },
    3: {categoryId: "123", supportId:"bikal@gmail.com"}


    Accounts:

    0: {email: "john@gmail.com", firstName: "john"},
    1: {email: "sherlock@gmail.com", firstName: "sherlock"},
    2: {email: "bikal@gmail.com", firstName: "bikal"}

Я должен добавить:

  • «Категории» в его конкретные «Счета» на основе «id» из «Категории»
  • «электронная почта» от «Счета»

Единственный способ связать их - это другой массив «Категория учетной записи», в котором есть оба поля.

Я не совсем понимаю, как этого добиться. Я в порядке с использованием lodash, но даже с этим я не уверен, как выполнить эту задачу.

Любая помощь будет оценена, спасибо!

Edit: Вывод должен выглядеть так:

Accounts:

0: {categories:[{id: "456", name:"Cat 2"}, {id: "123", name: "Cat 1"}], email: "john@gmail.com", firstName: "john"},
1: {categories:[{id: "789", name:"Cat 3"}], email: "sherlock@gmail.com", firstName: "sherlock"},
2: {categories:[{id: "123", name:"Cat 1"}], email: "bikal@gmail.com", firstName: "bikal"}

1 Ответ

0 голосов
/ 13 мая 2019

Довольно просто сделать - find правильный supportId на основе categoryId, затем вывести email и firstName и вернуть нужные свойства:

const Categories = [{id: "123", name: "Cat 1"},{id: "456", name: "Cat 2"},{id: "789", name: "Cat 3"}];
const AccountCategory = [{categoryId: "123", supportId:"john@gmail.com" },{categoryId: "456", supportId:"john@gmail.com" },{categoryId: "789", supportId:"sherlock@gmail.com" },{categoryId: "123", supportId:"bikal@gmail.com"}];
const Accounts = [{email: "john@gmail.com", firstName: "john"},{email: "sherlock@gmail.com", firstName: "sherlock"},{email: "bikal@gmail.com", firstName: "bikal"}];

const res = Categories.map(({ id, name }) => {
  const { supportId } = AccountCategory.find(({ categoryId }) => categoryId == id);
  const { email, firstName } = Accounts.find(({ email, firstName }) => email == supportId);
  return { id, name, email, firstName };
});

console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
...