我有一个带有嵌套元素的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>');
答案 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;
}