Javascript:使用递归迭代对象来构建导航列表

标签 javascript arrays object recursion navigation

如何使用以下对象构建多级导航。

var obj = {
    1:{
        title: "title1",
        link: "link1"
    },
    2:{
        title: "title2",
        link: "link2",
        1:{
            title: "title21",
            link: "link21"
        },
        2:{
            title: "title22",
            link: "link22"
        }
    }
}

我能够得到以下结果,但由于每个对象内的两个对象属性,我得到了双倍。查看工作FIDDLE在这里。

function menuWalker(obj) {
    var html = '<ul>';
    for (var property in obj){
        if (obj.hasOwnProperty(property)) {
            html += '<li>';
            console.log(obj[property]);
            if (typeof obj[property] == "object"){
                html += '<a href="' + obj[property].link + '">' + obj[property].title + '</a>';
                html +=  menuWalker(obj[property]);
            }else{
                html += '<a href="' + obj.link + '">' + obj.title + '</a>';
            }
            html += '</li>';
        }
    }
    html += '</ul>';
    return html;
}

当前 Html 结果:

  • 标题1
    • 标题1
    • 标题1
  • 标题2
    • 标题21
      • 标题21
      • 标题21
    • 标题22
      • 标题22
      • 标题22
    • 标题2
    • 标题2

最佳答案

如果您可以控制导航数据的结构,我建议如下。通过这种方式,您可以专门定义导航项是否有子项,并使一切变得更加清晰。

数据

var obj = [
    {
        title: "title1",
        link: "link1",
        children: []
    },
    {
        title: "title2",
        link: "link2",
        children: [
            {
                title: "title21",
                link: "link21"
            },
            {
                title: "title22",
                link: "link22"
            }
        ]
    }
];

沃克

function menuWalker(obj) {
    var html = '<ul>';
    for (var property in obj){
        if (obj.hasOwnProperty(property)) {
            html += '<li>';
            html += '<a href="' + obj[property].link + '">' + obj[property].title + '</a>';
            if (obj[property].children && obj[property].children.length > 0){
                html +=  menuWalker(obj[property].children);
            }
            html += '</li>';
        }
    }
    html += '</ul>';
    return html;
}

关于Javascript:使用递归迭代对象来构建导航列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011672/

相关文章:

javascript - jQuery 在显示后隐藏表单字段

c - 将文本文件扫描到数组中?

javascript - 如何在 Javascript 上动态交叉交叉合并那些 JSON 数组?

javascript - 将文本文件的内容放入javascript变量中

javascript - 配置 Node express 服务静态 bower_components?

javascript - form.submit 方法在 jQuery 中不起作用

c# - 预计长度为 2 的数组初始值设定项

c++ - "lost"堆栈对象发生了什么?

java - 将另一个类的多个实例添加到 LinkedList 中

javascript - 如何在自定义Object.prototype.xxx函数中获取对象本身?