@qqqqqqqqqqqa

Как на js преобразовать обьектный массив url дерева сайта в массив возможных url путей?

Знаю, возможно, вопрос звучит немного непонятно, поэтому:
Есть следующий фрагмент кода js, написанный в node js файле, обрабатывающем url-запросы:
var express = require('express');
var app = express();
app.set('view engine', 'ejs');

const pages = {
    "welcome":{},
    "i":{"some_id":{"posts":{"some_id"},
                    "questions":{"some_id"},
                    "friends":{},
                    "subscribers":{},
                    "storys":{},
                    "files":{},
                    "books":{},
                    "music":{},
                    "videos":{}
                   },
        },
    "main":{}
};

app.listen(80);

Это объект pages, содержащий разветвляющиеся существующие url-пути (для удобства и быстроты) в лице объектов, но мне нужна функция-преобразователь объекта pages в массив с перечисленными сверху вниз (без ветвлений) возможными путями на сайте. Т.е.:
function magic(){
     some code here
}
const pages = {
     "main"={
             "p1"={},
             "p2"={},
             "p3"={}
             },
      "somepage"={},
       "sounds"={
               "s1"={},
               "s2"={},
               "s3"={}
        }
};
var lines = magic(pages);
console.log(lines);
   =====> [/main/p1,
           /main/p2,
           /main/p3,
           /sonepage/,
           /sounds/s1,
           /sounds/s2,
           /sounds/s3]

Позже эти пути из массива, сравниваясь с запросами клиента, будут давать какой-то retern для клиента (страницу или 404). Я понимаю, что реализовать подобное нужно через циклы и их функции, но мои решения КРАЙНЕ кривые и нечитабельные. Пожалуйста, подскажите, как это сделать?
Если нужна еще какая-то информация, скажите, я ей постараюсь поделиться
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function getPaths(obj, path = [ '' ]) {
  const entries = Object.entries(obj);
  return entries.length
    ? entries.reduce((acc, n) => (
        path.push(n[0]),
        acc.push(...getPaths(n[1], path)),
        path.pop(),
        acc
      ), [])
    : [ path.join('/') ];
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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