递归函数的最后一个条目

时间:2014-12-17 23:19:37

标签: jquery recursion

我有一个带有嵌套元素的JSON数组,我试图打印出一个嵌套的无序列表, 它似乎工作,但只返回最后一个版本。我假设这是因为我在递归函数中声明了返回字符串,所以它只是覆盖它。但你怎么能这样做呢?  如果我使用全局变量,则会出现同样的问题。如果我尝试连接字符串,我可以看到它们,但多次。

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 个答案:

答案 0 :(得分:2)

要在每次迭代时添加到字符串,您需要

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

你在每次迭代时都会覆盖它,最后只有最后一次!

答案 1 :(得分:0)

是的,我确实在那里有+ =,我只是在发布的代码中留下了它。 但事实证明,这是因为我正在使用.some与父匹配当前项目检查。我拿出那些,只是用于每个。
因此,如果任何人需要一个嵌套列表的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/