Рекурсия дерева

285
12 декабря 2016, 10:09

Доброго времени!

Имеется такой JSON:

{
       "menu": [
             {"id":1,"cat_name":"Dashboard","parent":0},
             {"id":2,"cat_name":"Dashboard1","parent":0 },
             {"id":3,"cat_name":"Dashboard2","parent":0},
             {"id":4,"cat_name":"Dashboard3","parent":0},
             {"id":5,"cat_name":"Dashboard4","parent":1},
             {"id":6,"cat_name":"Dashboard5","parent":1},
             {"id":7,"cat_name":"Dashboard6","parent":1},
             {"id":8,"cat_name":"Dashboard7","parent":2},
             {"id":9,"cat_name":"Dashboard8","parent":5}
              ]
    }

Никак не получается нарисовать дерево из UL LI.

Пробовал так:

function rec(data) {
       var str='';
        var c=0;
        if (typeof(data) == 'object') {
            str+='<ul>';
            for(key in data){
                ++c;
                if(data[key].id==c){
                    str+='<li>'+data[key].cat_name+'</li>';
                }else{
                    rec(data[key].cat_name,c);
                }
            }
            str+='</ul>';
        }
        return str;
    }

Но не выходит, будьте добры, помогите, желательно без JQ, хочу понять сам принцип.

П.С. Благодарю.

Answer 1

Заполнение дерева идет на основании соответствия id и parent. Т.е. в рекурсивную функцию на каждом уровне надо передавать родителя уровня, который функция отстраивает и соответственно возвращать тоже надо что-то.

function rec(data, c) {
    var str = '';
    str += '<ul>';
    for (key in data) {
        if (data[key].parent == c) {
            str += '<li>' + data[key].cat_name;
            str += rec(data, data[key].id);
            str += '</li>';
        }
    }
    str += '</ul>';
    return str;
}

http://jsfiddle.net/arb0rd2p/

ЗЫ Чтоб для пустых узлов не создавались ul - самостоятельно.

READ ALSO
Как получить значение jquery в выбранном блоке?

Как получить значение jquery в выбранном блоке?

Ребят, всем приветЕсть такая верстка:

217
Не работает анимация изображения

Не работает анимация изображения

Всем приветХочу реализовать анимацию изображения при клике

243
Передать значение функции в value inputa

Передать значение функции в value inputa

Добрый день! Помогите, пожалуйста, разобраться

249