有没有性能比较好的方法,把这对象变成树形结构

发布于 2022-09-12 22:46:31 字数 561 浏览 10 评论 0

image.png

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:"音乐",
        }
    ]
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

负佳期 2022-09-19 22:46:31

一共 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);
说好的呢 2022-09-19 22:46:31

正好回答了个类似的,大概是这个意思,自己再根据情况完善下就行了

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": "用户设置"
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文