Создать детей в forEach - PullRequest
       4

Создать детей в forEach

1 голос
/ 26 февраля 2020

permissions = ["создание: пользователи", "чтение: профиль", "чтение: роли", "чтение: пользователи", "обновление: пользователи", "запись: сообщения"];

in эта функция генерирует массив объектов, которые будут моими пунктами меню , в этом массиве это выглядит так:

create:user
update:user
read:user

как я могу сделать так, чтобы при выполнении нескольких действий для маршрута получался пример в этом массиве:

{title: 'Users', icon: 'edit-2-outline', 
children: [
      {
      title: 'Create users',
      link: '/pages/forms/inputs',
      },
      {
      title: 'Update users',
      link: '/pages/forms/inputs',
      },
      {
      title: ' Read users',
      link: '/pages/forms/inputs',
      },
]
},

1 Ответ

0 голосов
/ 26 февраля 2020

В forEach l oop вы можете построить один объект с keys в качестве имени (group by) и значений. Если тот же ключ повторить (скажем, «ПОЛЬЗОВАТЕЛИ»), то pu sh своим детям. В конце l oop просто получите Object.values, чтобы получить массив построенных объектов.

const permissions = [
  "create:users",
  "read:profile",
  "read:roles",
  "read:users",
  "update:users",
  "write:messages"
];

const itemsObj = {};

permissions.forEach(item => {
  const [action, name] = item.split(":");
  const newItem = {
    title: name.toUpperCase(),
    icon: "plus-square-outline",
    children: [
      {
        title: `${action} ${name}`,
        link: "/" + name
      }
    ]
  };
  itemsObj[name] =
    name in itemsObj
      ? {
          ...itemsObj[name],
          children: [...itemsObj[name].children,
          ...newItem.children]
        }
      : newItem;
});

const items = Object.values(itemsObj);

console.log(items);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...