2014-12-17 3 views
0

У меня есть массив JSON с вложенными элементами, я пытаюсь распечатать вложенный неупорядоченный список, , похоже, работает, но возвращает только последнюю версию. Я предполагаю, что это потому, что я объявляю returnstring внутри рекурсивной функции, поэтому она просто перезаписывает ее. Но как еще вы можете это сделать? Если я использую глобальную переменную, возникает такая же проблема. Если я попытаюсь объединить строку, я могу видеть их всех, но несколько раз.Последняя запись в рекурсивной функции

var tree = [{"menu":"A01","parent":"","desc":"HOME"},{"menu":"A02","parent":"","desc":"PREFERENCES","children":[{"menu":"A03","parent":"A02","desc":"Themes"}]},{"menu":"A04","parent":"","desc":"Configure","children":[{"menu":"A05","parent":"A04","desc":"Forms"},{"menu":"A06","parent":"A04","desc":"Users","children":[{"menu":"A07","parent":"A06","desc":"Groups","children":[{"menu":"A08","parent":"A07","desc":"Exit"},{"menu":"A09","parent":"A07","desc":"Restart VS"}]}]}]}]; 

var endMenu =getMenu(tree); 
var retStr =""; 
    function getMenu(nodes){ 

    nodes.map(function(nodem){ 
     var subMenu = ""; 
     if(typeof nodem.children !="undefined"){    
      nodem.children.some(function(childNode){ 
       if(childNode.parent == nodem.menu) 
        subMenu='<ul>'+ getMenu(nodem.children) + '</ul>' 
      }); 
     } 
     retStr = '<li>'+nodem.desc + subMenu + '</li>' ; 
    }); 
    return retStr;   
} 
$('#menu').html('<ul>'+endMenu+ '</ul>'); 

У меня есть http://jsfiddle.net/LqES7/73/ для махинаций с

ответ

2

Чтобы добавить строку на каждой итерации, вы могли бы сделать

retStr += '<li>'+nodem.desc + subMenu + '</li>' ; 

вы перезаписать его на каждой итерации, и в конечном итоге просто последний!

+0

Вот как у меня есть текущая скрипка, но затем я получаю вещи, как выход, выход, перезагрузка, выход, перезапуск , группы, выход, перезапуск, группы, пользователи – Jaynesify

0

Да, у меня был + = там, я просто оставил его в опубликованном коде. Но, оказывается, это было потому, что я использовал. Некоторое количество в сочетании с родительским совпадением текущей проверки элемента. Я взял их и просто использовал для каждого.
Так что если кому-то нужен JSON вложенного массив вложен списку проверить эту скрипку

function getMenu(nodes){ 
var retStr =""; 
    nodes.forEach(function(nodem){ 
     var subMenu = ""; 
     if(typeof nodem.children !="undefined"){   
      nodem.children.forEach(function(childNode){ 
       if(childNode.parent == nodem.menu) 
        subMenu='<ul>'+ getMenu(nodem.children) + '</ul>' 
        }); 
     } 
     retStr += '<li>'+ nodem.desc + subMenu + '</li>' ; 
    }); 
    return retStr;   
} 

http://jsfiddle.net/LqES7/74/

Смежные вопросы