之前在写管理后台的权限控制这一块的时候,使用的是element的树组件,当时还是只做到了菜单的权限,最近才开始做按钮的权限,由于需求不断,总是有新功能,所以就要不断添加按钮,这个时候就发现了一个问题。大概阐述一下我们的业务场景
var arr = [
{
menuId: 1,
name: "系统管理",
parentMenu: null
},
{
menuId: 2,
name: "系统管理",
parentMenu: null
},
{
menuId: 3,
name: "系统管理",
parentMenu: 1
},
{
menuId: 4,
name: "系统管理",
parentMenu: 1
}, {
menuId: 5,
name: "系统管理",
parentMenu: 2
},
{
menuId: 6,
name: "系统管理",
parentMenu: 5
},
{
menuId: 7,
name: "系统管理",
parentMenu: null
}
]
复制代码
类似于这种,所以由于有些父节点不在,所以不能构成相应的树。这个时候,后台大佬,突然来了一句,用hashmap不就行了,听见了hashmap好像一下子明白了什么。然后,将当前角色对应的权限数据序列化成了一个id为key,value为children数组的一个对象,方法非常简单,
getNewTree(arr) {
const allParentId = {}
arr.forEach(item => {
if (item.parentId) {
let flag = false
Object.keys(allParentId).forEach(itemA => {
if (itemA == item.parentId) {
flag = true
}
})
if (flag) {
allParentId[item.parentId].push(item)
} else {
allParentId[item.parentId] = []
allParentId[item.parentId].push(item)
}
}
})
return allParentId
},
复制代码
得到的数据结构是这样的
最后,,,求一份内推。。。