@SergeiB

Как сформировать содержание из массива заголовков?

Есть объёмная статья. Задача - собрать все её заголовки и сформировать из них содержание, сохранив при этом иерархическую структуру. Например, у меня будет следующий массив заголовков:
var arr = [h2, h3, h3, h2, h2, h2, h3, h4];
Соответственно должен получиться такой список:
<ul>
  <li>h2
    <ul>
      <li>h3</li>
      <li>h3</li>
    </ul>
  </li>
  <li>h2</li>
  <li>h2</li>
  <li>h2
    <ul>
      <li>h3
        <ul>
          <li>h4</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

Буду рад любым подсказкам и идеям. Спасибо.
  • Вопрос задан
  • 95 просмотров
Решения вопроса 2
@h88p
Pre-Junior HTML Developer
var arr2 = ['h2', 'h3', 'h3', 'h2', 'h2', 'h2', 'h3', 'h4'];

function setList(arr) {
	if (arr.length === 0) return '<ul>\n</ul>';
	let fullList = '<ul>\n';
	let ends = [];
	arr.forEach((w,e) => {
		if((arr[e+1]) && (parseInt(w[1]) < parseInt(arr[e+1][1]))){
			fullList += `<li>${w}\n<ul>\n`;
			ends.push('</ul>\n</li>');
		} else if ((arr[e+1]) && (parseInt(w[1]) === parseInt(arr[e+1][1]))) {
			fullList += `<li>${w}</li>\n`;
		} else {
			fullList +=`<li>${w}</li>\n` +  ends.join('\n') + '\n';
			ends = [];
		}
	}) 
	fullList = fullList + '</ul>';
	return fullList;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы