JS非递归生成树
代码写在H5页面上我就不多写了直接上关键代码:
var data = [{
id: 1,
name: '用户管理',
pid: 0
},
{
id: 2,
name: '角色管理',
pid: 0
},
{
id: 3,
name: '菜单管理',
pid: 0
},
{
id: 4,
name: '用户删除',
pid: 1
},
{
id: 11,
name: '用户角色',
pid: 5
},
{
id: 5,
name: '用户添加',
pid: 1
},
{
id: 6,
name: '用户更新',
pid: 1
},
{
id: 7,
name: '角色添加',
pid: 2
},
{
id: 8,
name: '角色更新',
pid: 2
},
{
id: 9,
name: '菜单添加',
pid: 3
},
{
id: 10,
name: '菜单更新',
pid: 3
}
];
//建立整棵树的索引
var map = {};
data.forEach(item => {
map[item.id] = item;
})
//创建存放树的数组
var tree = [];
//循环遍历生成树
data.forEach(item => {
//根据Pid检索对象是否存在
var parent = map[item.pid];
//如果存在就加入到父节点中
if (parent) {
//是否存在孩子数组 有就添加没有就创建
if (parent.children == undefined) {
parent.children = [];
}
parent.children.push(item);
} else {
//如果不存在,那么这就是根节点,直接加入到数组中
tree.push(item);
}
})
//打印效果
console.log(tree);
这是我学习的一段代码,我做了详细的注释,希望能帮助到需要的人。不足之处希望大家指教,同时我也希望大加能够给我分享一些关于树检索树的更好、效率更高的方法。