@Zig-mund

Одномерный массив в многомерный?

есть одноуровневый массив вида:

[ 
     {path: '/laravel-page', title: ' Laravel Page', parent: false},
     {path: '/posts/create', title: ' Posts Create', parent: false},
     {path: '/posts/edit', title: ' Posts Edit', parent: false},
     {path: '/posts/', title: ' Posts ', parent: true}
    ]

Нужно сделать многоуровневый массив типа:

[
  {
            parent: true,
            path: "/posts/",
            title: "  Posts ",
            child: [{
                parent: false
                path: "/posts/edit",
                title: " Posts Edit ",
                child: []
            }, {
                parent: false
                path: "/posts/create",
                title: " Posts Create ",
                child: []
            }]
        }, {
            parent: false,
            path: "/laravel-page",
            title: " Laravel Page ",
            child: []
        }
 ]

где вложенность определяется флагом parent: true а родитель по наличию схожего path. Типа как /posts/ - родитель, а /posts/create - ребенок
  • Вопрос задан
  • 217 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
(function toArrays(obj) {
  const arr = Object.values(obj ?? {});
  arr.forEach(n => n.children = toArrays(n.children));
  return arr;
})(arr.reduce((acc, n) => {
  const path = n.path.replace(/^\/|\/$/g, '').split('/');
  const obj = path.reduce((p, c) => ((p.children ??= {})[c] ??= {}), acc);
  Object.assign(obj, n);
  return acc;
}, {}).children)
Ответ написан
@Everybody_Lies
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы