Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2015, 11:41
Новичок на форуме
Отправить личное сообщение для АлександраМТ Посмотреть профиль Найти все сообщения от АлександраМТ
 
Регистрация: 23.07.2015
Сообщений: 2

Из матрицы в древовидное меню
Добрый день!

В javascript пока в процессе знакомства, и возникла такая задачка в процессе обучения, которая затормозила...
Есть матрица [1,2,[3,4,[5,6,7],8],9,10].
С помощью функции (желательно, рекурсивной), нужно её превратить в меню вида:
<ul>
<li>1</li>
<li>2</li>
   <ul>
     <li>3</li>
     <li>4</li>
        <ul>
          <li>5</li>
          <li>6</li>
          <li>7</li>
        </ul>
     <li>8</li>
   </ul>
<li>9</li>
<li>10</li>
</ul>


Написала такой код:
function recursiveList (data) {
        var arr = data;
        var list = document.getElementById('list'); 
        var newlist = document.createElement('ul');
          for (var i = 0; i < arr.length; i++) {
                   var item = document.createElement("li");
                   item.appendChild(document.createTextNode(arr[i]));
                   newlist.appendChild(item);
            };
        list.appendChild(newlist);       
         for (var i = 0; i < arr.length; i++) {
           if (typeof(arr[i]) == 'object') {
                    return recursiveList(arr[i]);
            }
        };   
    
     return list;    
    }


Но пока что получаю значения в виде:
<ul>
<li>1</li>
<li>2</li>
<li>3 4 5 6 7 8</li>
<li>9</li>
<li>10</li>
</ul>

<ul>
  <li>3</li>
  <li>4</li>
  <li>5 6 7</li>
  <li>8</li>
</ul>

<ul>
    <li>5</li>
    <li>6</li>
    <li>7</li>
</ul>


Что нужно сделать, чтоб привести её в нужный вид? Буду очень благодарна помощи!
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2015, 12:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

создание дерева ul li из массива
АлександраМТ,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
<script>
var data = [1,2,[3,4,[5,6,7],8],9,10];
function recursiveList(data) {
    var newlist = document.createElement("ul"),
        item;
    for (var i = 0; i < data.length; i++) {
        if (typeof data[i] == "object") item = recursiveList(data[i]);
        else {
            item = document.createElement("li");
            item.appendChild(document.createTextNode(data[i]))
        }
        newlist.appendChild(item)
    }
    return newlist
};
document.body.appendChild(recursiveList(data))
</script>
</body>

</html>

Последний раз редактировалось рони, 23.07.2015 в 12:17.
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2015, 12:33
Аспирант
Посмотреть профиль Найти все сообщения от tysonfury2015
 
Регистрация: 22.07.2015
Сообщений: 68

Сообщение от АлександраМТ
Есть матрица
А с какой стороны это матрица?

Твою задачу можно очень тупо, в лоб решить, безо всякой вонючей ркурсии.
<html>


<head>
</head>
<body>



<script>




with(document){

div=createElement("div")

div.innerHTML=JSON.stringify([1,2,[3,4, [5, 6, 7], 8], 9, 10])
 .replace(/\[/g, "<ul>")
 .replace(/\]/g, "</ul>")
 .replace(/(\d+)/g, "<li>$1</li>")
 .replace(/,/g, "")

body.appendChild(div)

}



</script>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2015, 12:59
Новичок на форуме
Отправить личное сообщение для АлександраМТ Посмотреть профиль Найти все сообщения от АлександраМТ
 
Регистрация: 23.07.2015
Сообщений: 2

Сообщение от рони Посмотреть сообщение
АлександраМТ,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
<script>
var data = [1,2,[3,4,[5,6,7],8],9,10];
function recursiveList(data) {
    var newlist = document.createElement("ul"),
        item;
    for (var i = 0; i < data.length; i++) {
        if (typeof data[i] == "object") item = recursiveList(data[i]);
        else {
            item = document.createElement("li");
            item.appendChild(document.createTextNode(data[i]))
        }
        newlist.appendChild(item)
    }
    return newlist
};
document.body.appendChild(recursiveList(data))
</script>
</body>

</html>
Спасибо большое за помощь! Вы очень помогли)

Сообщение от tysonfury2015
А с какой стороны это матрица?
Массив, ошиблась...

Сообщение от tysonfury2015
Твою задачу можно очень тупо, в лоб решить, безо всякой вонючей ркурсии.
Это да, в разы быстрее. Но по заданию именно с рекурсией требуется. Но такое решения я тоже запомню. Спасибо)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бесконечноуровневое меню на CSS ruslan_mart Ваши сайты и скрипты 5 12.01.2015 20:59
Древовидное меню и селекторы youstm jQuery 6 15.09.2014 12:42
Выделение активных пунктов многоуровневого меню на jQuery Letto Элементы интерфейса 2 04.12.2013 15:30
Древовидное меню Купэ Мобильный JavaScript 4 10.01.2012 11:18
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36