递归循环数据

下面的数据想用递归或其实灵活的方法
把他实现成下面的最终结果要怎么实现???

var menus = [];

//数据
{
    "value":[
        {
            "subMenus":[],
            "menuName":"一级",
            "clickUrl":"/"
        },
        {
            "menuName":"一级",
            "subMenus":[{
                "subMenus":[],
                "clickUrl":"/two/a"
                "menuName":"二级"
            },{
                "subMenus":[],
                "clickUrl":"/two/b",
                "menuName":"二级"
            }]
        }
    ]
}

//最终结果
menus: [
    { title: '一级', path: '/'},
    {
        title: '一级',
        children: [
            { title: '二级', path: '/two/a' },
            { title: '二级', path: '/two/b' },
        ]
    },
    {
        title: '一级',
        children: [
            { 
                title: '二级',
                children: [
                    {title: '三级', path: '/three/c'}
                ]    
            }
        ]
    }
]
阅读 2.1k
2 个回答

直接上代码~

<html>

    <script src="jquery.min.js"></script>
    <body>
        <script>
            var menus = [];

            var  temp = {
                "value":[
                    {
                        "subMenus":[],
                        "menuName":"一级",
                        "clickUrl":"/",
                    },
                    {
                        "menuName":"一级",
                        "subMenus":[{
                            "subMenus":[],
                            "clickUrl":"/two/a",
                            "menuName":"二级",
                        },{
                            "subMenus":[],
                            "clickUrl":"/two/b",
                            "menuName":"二级",
                        }]
                    }
                ]
            };
            function changeJson(temp){
                var tempMenus = [];
                for(var i = 0; i < temp.length; i ++){
                    tempMenus.push({});
                    var menuItem = tempMenus[i];
                    menuItem.title = temp[i].menuName;
                    menuItem.path = temp[i].clickUrl;
                    if(temp[i].subMenus.length > 0){
                        menuItem.children = changeJson(temp[i].subMenus);
                    }else{
                        menuItem.children = [];
                    }
                }
                return tempMenus;
            }
            console.log(changeJson(temp.value));
        </script>
    </body>
</html>
function convert(data){
    var deep = data.value || data.subMenus
    return !deep ? [] : deep.map(function(menu){
        return {
            title:menu.menuName,
            path:menu.clickUrl,
            children:convert(menu)
        }
    })
}
// 使用的时候
var menus = convert(yourobject)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题