Как отсортировать массив страниц?

135
08 сентября 2019, 20:20

Коллеги, на сайте есть страницы.

Не важно какая функция, но есть функция, которая считывает наличие страниц и возвращает массив (этих самых страниц), и в соответствии из данных которого я уже создаю объект с нужными мне данными.

let _getPages = [];
pages.forEach((s, i, arr) => {
    _getPages[i] = {
        href: s.split('/')[2].split('.')[0].capitalize(),
        link: s
    }
})

Получаю такое:

{href: "About_us", link: "frontend/pages/about_us/index.html"}
{href: "Contact", link: "frontend/pages/contact/index.html"}
{href: "Main", link: "frontend/pages/main/index.html"}
{href: "Slider", link: "frontend/pages/slider/index.html"}

Далее, имея все это я создаю Меню на странице

const li = document.createElement('li');
const menu = document.querySelector('menu');

_getPages.forEach((s, i, arr)=>{
    let listPage = li.cloneNode(true);
    listPage.classList.add('listPage');
    listPage.innerHTML = s.href
    menu.appendChild(listPage);
})

И в итоге, что у меня есть

В итоге, не могу сообразить, как именно и на каком уровне с сортировать так, чтобы я получил меню С той последовательностью страниц которую хочу.

Допустим, чтобы Main, был на первом месте, About_us, на последнем....

P.S. Первое что пришло в голову, это добавить в название папок буквы a, b, c, d....., а потом их срезать, но не думаю, что это профессиональный подход

Вопрос немного глуповат, но не соображу ни как.

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

Так как и на каком уровне отсортировать массив?

Answer 1

Для начала, следует признать, что порядок - не единственная информация которую вам не удалось получить. Ещё вам нужны нормальные заголовки ("About us" пишется без подчёркивания!), перевод их на другие языки, цвет...

Проще всего - не играться с автоматическим определением страниц сайта, а записать всё меню в отдельный файл.

Если же такой вариант не устраивает по каким-то причинам (например, из-за раздельного деплоя) - нужно добавить файл с описанием к каждой странице. Пусть у вас будут файлы pages/about_us/info.json, pages/contact/info.json и т.п. Дальше можно завести для каждой страницы атрибут order и сортировать по нему.

Как вариант, всю необходимую информацию можно попытаться добавить в мета-тэги. Но тут вам понадобится уже парсер html чтобы её прочитать.

Answer 2

const menuIWant = ["Main","Contact","Slider", "About_us" ]; 
let _getPages = [ 
  {href: "About_us", link: "frontend/pages/about_us/index.html"}, 
  {href: "Contact", link: "frontend/pages/contact/index.html"}, 
  {href: "Main", link: "frontend/pages/main/index.html"}, 
  {href: "Slider", link: "frontend/pages/slider/index.html"}, 
]; 
 
const result = []; 
 
menuIWant.forEach(item => { 
  for (let i=0; i<_getPages.length; i++){ 
    if (_getPages[i].href === item) { 
       result.push(_getPages[i]); 
       break; 
      } 
    } 
}) 
console.log(result)

READ ALSO
Jquery берет старый элемент

Jquery берет старый элемент

Возникла проблема при обновлении страницы с помощью AjaxПо идее oldImage и newImage Это один и тот же элемент

99
Перехват запросов посредством &ldquo;JS&rdquo; в &ldquo;Chrome&rdquo;?

Перехват запросов посредством “JS” в “Chrome”?

Как можно сделать перехват запросов посредством JS в "Chrome" ? Например, чтобы на любой запрос на какой-то или на все сайты мне возвращалась строка...

107
mpdf - перенос строк в шапке таблицы

mpdf - перенос строк в шапке таблицы

При формировании таблицы в mpdf необходимо развернуть текст в шапке и в заданных местах перенестиВот пример кода:

117
Некорректное отображение товаров

Некорректное отображение товаров

Проблема в том, что некорректно отображаются товары, некие дыры в спискеКак починить? Кто-то сталкивался с таким?

109