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

151
27 января 2020, 10:20

Напишите функцию, которая создаёт вложенный список 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);
    <div id="container"></div>

    Answer 1

    В блоке if создается разметка тега , но если узел пустой {}, то соответственно переменная li будет равна пустой строке. Если это так то тогда не создастся переменная ul.

    Далее есть еще одно условие, но не очевидное (ul || ''). Если переменная ul не определена, а определяется она в блоке if, то вернуть пустую строку. Так что да, если узел пустой, то вернется пустая строка.

    READ ALSO
    не работает роутинг после деплоя на gh pages react app

    не работает роутинг после деплоя на gh pages react app

    Не могу понять почему не работает роутинг на деплое

    160
    Пустой экран json-сервер с ReactJS?

    Пустой экран json-сервер с ReactJS?

    Пытаюсь реализовать приложение на ReactJS с использованием json-сервераЗахожу на localhost:3001 и localhost:3000 - пустота

    145
    vue.js axios отправка формы

    vue.js axios отправка формы

    Пытаюсь отправить форму через axios, судя по devtools форма уходит, все заголовки и request payload там есть, но в php файле принять данные не получаетсяМассив...

    131