ZdraviiSmisl
@ZdraviiSmisl

Вопрос по работе рекурсивной функции?

Напишите функцию, которая создаёт вложенный список UL/LI (дерево) из объекта. Как я понимаю функция createTreeText(obj) обрабатывает вложенные друг в друга объекты.Непонятно логика работы в блоке if. И возврат пустой строки будет в том случае если узел

будет пустым

var data = {
      "Рыбы": {
        "Форель": {},
        "Щука": {}
      },
      "Деревья": {
        "Хвойные": {
          "Лиственница": {},
          "Ель": {}
        },
        "Цветковые": {
          "Берёза": {},
          "Тополь": {}
        }
      }
    };

    function createTree(container, obj) {
      container.innerHTML = createTreeText(obj);
    }

    function createTreeText(obj) { // отдельная рекурсивная функция
      var li = '';
      for (var key in obj) {
        li += '<li>' + key + createTreeText(obj[key]) + '</li>';
      }
      if (li) { //(1)
        var ul = '<ul>' + li + '</ul>'
      }
      return ul || '';
    }

    var container = document.getElementById('container');
    createTree(container, data);
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
@DanKud
Не совсем понятно о чем вы спрашиваете, при этом вроде сами описываете суть работы функции. Принцип работы цикла for ... in такой, что он просто не будет срабатывать если объект пустой. Соответственно если объект НЕ пустой и цикл прошел, то в переменную li записываются данные, и раз она не пустая то выполняется условие, что элементы <li> вкладываются в список <ul>, иначе функция вернет пустую строку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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