export const permission = {
"Home": "首页",
"Home/Music": "音乐",
"Home/Video": "视频",
"Home/Picture": "图片",
"About": "关于",
"About2": "关于2",
"Home/Setting": "设置",
"About/Contact": "联系我们",
"Home/Setting/System": "系统设置",
"Home/Setting/User": "用户设置",
};
转成
{
name:"Home",
path:"/Home",
title:"首页",
children:[
{
name:"Music",
path:"/Home/Music",
title:"音乐",
}
]
}
###一共 N * 3 次
const permission = {
"Home": "首页",
"Home/Music": "音乐",
"Home/Video": "视频",
"Home/Picture": "图片",
"About": "关于",
"About2": "关于2",
"Home/Setting": "设置",
"About/Contact": "联系我们",
"Home/Setting/System": "系统设置",
"Home/Setting/User": "用户设置",
};
const list = Object.keys(permission).map(key => {
const pathArr = key.split('/')
const pName = pathArr[pathArr.length - 2]
const name = pathArr[pathArr.length - 1]
return {
pName,
name,
title: permission[key],
path: key,
}
})
let map = list.reduce((acc, current) => {
let key = 'name'
let _key = `key_${[current[key]]}`
acc[_key] = current
return acc
}, {})
let result = []
list.forEach((item) => {
let _key = `key_${item.pName}`
let parent = map[_key]
if (!parent) {
result.push(item)
} else {
parent.children = parent.children || []
parent.children.push(item)
}
})
console.log('result: ', result);
###正好回答了个类似的,大概是这个意思,自己再根据情况完善下就行了
function transData(data){
let obj = {}
for(let key in data){
let title = data[key]
let list = key.split('/')
list.reduce((parent, citem) => {
return (parent[citem] = parent[citem] || {})
}, obj)
}
return loop(obj, '/', data)
}
function loop(obj, path, data){
return Object.keys(obj).map(key => {
let p = path + key, cc = loop(obj[key], p + '/', data)
return {
name: key,
title: data[p.slice(1)],
path: p,
children: cc.length ? cc : undefined
}
})
}
transData({
Home: "首页",
"Home/Music": "音乐",
"Home/Video": "视频",
"Home/Picture": "图片",
About: "关于",
About2: "关于2",
"Home/Setting": "设置",
"About/Contact": "联系我们",
"Home/Setting/System": "系统设置",
"Home/Setting/User": "用户设置"
})