Как объединить Массив объекта конфигурации маршрута в один Массив очищенного конфигурации? - PullRequest
0 голосов
/ 21 февраля 2019

Конфигурация маршрута хранится в нескольких пакетах в node_modules,

Мы хотим правильно отсортировать их по path, когда мы сгруппируем их все в один массив в нашем приложении.

Для детей, узнаваемых по childRoutes, мы хотим сохранить глубину.

Вот как это выглядит:

const routeConfig1 = [
  {
    path: "/user-management",
    childRoutes: [
      {
        path: "/user-management/user",
        childRoutes: [
          {
            path: "/user-management/user/service"
          }
        ]
      }
    ]
  }
];

const routeConfig2 = [
  {
    path: "/user-management",
    childRoutes: [
      {
        path: "/user-management/user",
        component: "UserComponent",
        childRoutes: [
          {
            path: "/user-management/user/service/tokyo",
            component: "TokyoService"
          }
        ]
      }
    ]
  }
];

const routeConfig3 = [
  {
    path: "/user-management",
    childRoutes: [
      {
        path: "/user-management/user/:id"
      }
    ]
  }
];

const routeConfigList = [routeConfig1, routeConfig2, routeConfig3];

function mergeRouteConfig(list) {
  let newList = [...list];
  list.map(r => {});
  return newList;
}

const flatten = mergeRouteConfig(routeConfigList);

const expected = [
  [
    {
      path: "/user-management",
      childRoutes: [
        {
          path: "/user-management/user",
          component: "UserComponent",
          childRoutes: [
            {
              path: "/user-management/user/service"
            },
            {
              path: "/user-management/user/service/tokyo",
              component: "TokyoService"
            }
          ]
        },
        {
          path: "/user-management/user/:id"
        }
      ]
    }
  ]
];

const flattenStr = JSON.stringify(flatten, null, 2);
const expectedStr = JSON.stringify(expected, null, 2);
const result = flattenStr === expectedStr;

document.getElementById(
  "app"
).innerHTML = `Result: ${`${result ? "OK" : "NOK"}`}

${flattenStr}

Ожидаемый

${expectedStr}
`;
body{font-family:sans-serif}pre{background:#ccc}
<div id="app"></div>

Codesandbox : https://codesandbox.io/s/1zmy69r5mq

Я пробовал с Map, reduce, но мой код выглядит немного сложнее, как я могу добиться этого должным образом?

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