前端学习案例-js实现树形结构化

    我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注小歌谣 日常分享前后端知识

前言

今天来讲一下平常我们做权限系统中的树形结构知识
就是如何把对应关系的结构数据转换为可以一个树形结构

const data = [
  {
    id: 2,
    pid: 0,
    path: '/course',
    name: 'Course',
    title: '课程管理'
  },
  {
    id: 3,
    name: 'CourseOperate',
    path: 'operate',
    link: '/course/operate',
    pid: 2,
    title: '课程操作'
  },
  {
    id: 4,
    name: 'CourseInfoData',
    path: 'info_data',
    link: '/course/operate/info_data',
    pid: 3,
    title: '课程数据'
  },
  {
    id: 5,
    name: 'CourseAdd',
    path: 'add',
    link: '/course/add',
    pid: 2,
    title: '增加课程'
  },
  {
    id: 6,
    pid: 0,
    path: '/student',
    name: 'Student',
    title: '学生管理',
  },
  {
    id: 7,
    name: 'StudentOperate',
    path: 'operate',
    link: '/student/operate',
    pid: 6,
    title: '学生操作'
  },
  {
    id: 8,
    name: 'StudentAdd',
    path: 'add',
    link: '/student/add',
    pid: 6,
    title: '增加学生'
  },
  {
    id: 9,
    name: '123123',
    path: '234234',
    link: '/student/add',
    pid: 8,
    title: '增加学生'
  },
  {
    id: 10,
    name: '234234',
    path: '345345',
    link: '/student/add',
    pid: 9,
    title: '增加学生'
  },
  {
    id: 11,
    name: '345345',
    path: '456456',
    link: '/student/add',
    pid: 10,
    title: '增加学生'
  }
];

数据大概是以上这样的
要给他转换为树形结构
可以开始直接操作了
基本数据

// 树形结构数据结构化

/**
 * [
 *   {
        id: 2,
        pid: 0,
        path: '/course',
        name: 'Course',
        title: '课程管理',
        children: [
          {
            id: 3,
            name: 'CourseOperate',
            path: 'operate',
            link: '/course/operate',
            pid: 2,
            title: '课程操作',
            children: [
              {
                id: 4,
                name: 'CourseInfoData',
                path: 'info_data',
                link: '/course/operate/info_data',
                pid: 3,
                title: '课程数据'
              }
            ]
          },
          {
            id: 5,
            name: 'CourseAdd',
            path: 'add',
            link: '/course/add',
            pid: 2,
            title: '增加课程'
          }
        ]
      },
 *    {
        id: 6,
        pid: 0,
        path: '/student',
        name: 'Student',
        title: '学生管理',
        children: [
          {
            id: 7,
            name: 'StudentOperate',
            path: 'operate',
            link: '/student/operate',
            pid: 6,
            title: '学生操作'
          },
          {
            id: 8,
            name: 'StudentAdd',
            path: 'add',
            link: '/student/add',
            pid: 6,
            title: '增加学生'
          }
        ]
      }
 * ]

结构这样
两种方式处理数据

直接上代码 可以自己调试

const treeData = formatDataTree(data);

console.log(treeData);

// function formatDataTree (data) {
//   let parents = data.filter(p => p.pid === 0),
//       children = data.filter(c => c.pid !== 0);

//   dataToTree(parents, children);
 
//   return parents;
//   // parents  childrens array []
//   function dataToTree (parents, children) {
//     parents.map(p => {
//       children.map((c, i) => {
//         if (c.pid === p.id) {
//           let _children = JSON.parse(JSON.stringify(children));
//           _children.splice(i, 1);
//           dataToTree([c], _children);
//           if (p.children) {
//             p.children.push(c);
//           } else {
//             p.children = [c];
//           }
//         }
//       });
//     })
//   }
// }

function formatDataTree (data) {
  let _data = JSON.parse(JSON.stringify(data));

  return _data.filter(p => {
    const _arr = _data.filter(c => c.pid === p.id);
    _arr.length && (p.children = _arr);
    return p.pid === 0;
  });
}
 

posted @   前端导师歌谣  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示