现需要一个树形菜单(需要根据数据情况,自动生成,没有上线,极端情况就是有很多级菜单),现用插件替代,需要如下数据格式[{name:'菜单名1',children:[{name:'菜单名1-1',children:[{name:'菜单名1-1-1'}]}]},{name:'菜单名2',children:[{name:'菜单2-2'}]},{name:'菜单3'}]//数据会通过children包含子菜单,有多少级子菜单,数据内部就会有多少个children的嵌套现后台提供的数据格式如下所示[{name:'菜单一',children:{'aaa':{name:'aaa'},'bbb':{name:'bbb',children:{'ccc':{name:'ccc'},'ddd':{name:'ddd'}}}}},{name:'菜单2',children:{'eee':{name:'eee'}}},{name:'菜单3'}]//后台给的数据,在children中并非数组,而是将子菜单的名字当作了json的key,然后对应一个json字段{name:'菜单的名字'}自己写的半成品方法如下所示vartreeData=[];functioncreatedTreeData(data){data.forEach(function(item){functionchildren(childrenData){varchildrenArr=[]for(keyinchildrenData){//就是在这个forin的递归中始终出现问题}returnchildrenArr}treeData.push({name:item.name,children:children(item.children)})})}//ps:请勿使用ES6语法,因为基于一个老项目增加一个新功能,并没有babel在线等,谢谢啦
2 回答
白板的微信
TA贡献1883条经验 获得超3个赞
emmmm...functionhandleChildren(obj){returnObject.keys(obj).map(function(v){varchildren=obj[v].children;if(children)obj[v].children=handleChildren(children);returnobj[v];});}functioncreatedTreeData(arr){returnarr.map(function(v){varchildren=v.children;if(children)v.children=handleChildren(children);returnv;});}createdTreeData(arr);
添加回答
举报
0/150
提交
取消