小白,请教各位大佬!求助:一个关于递归格式化数据的问题

现需要一个树形菜单(需要根据数据情况,自动生成,没有上线,极端情况就是有很多级菜单),现用插件替代,需要如下数据格式
[
{
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
在线等,谢谢啦
茅侃侃
浏览 352回答 2
2回答

慕妹3146593

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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript