此文来自转载
假设后端数据:
treeData:[
{id:001,name:'一级菜单',parentId:'0'},
{id:002,name:'二级菜单',parentId:'1'},
{id:003,name:'三级菜单',parentId:'2'},
{id:004,name:'二级菜单',parentId:'1'},
{id:005,name:'二级菜单',parentId:'1'},
{id:006,name:'一级菜单',parentId:'0'},
]
function toTree(treeData){
treeData.forEach(function(item){ //删除children 以防多次调用
delete item.children;
})
var map={};
treeData.forEach(function(item){ // 把id作为map的索引
map[item.id]=item;
})
var val =[];
treeData.forEach(function(item){ // 用当前遍历的id去map中找parentId
var parent =map[item.parentId];
if(parent){ //如果找到,说明不在索引中,就添加到对应的父级中
(parent.children||(parent.children==[])).push(item)
}else{ //如果没找到,说明是顶级,直接添加到索引中
val.push(item);
}
})
return val;
}