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;});
}

打印结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

viewer.js实现预览效果

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注小歌谣 日常分享前后端知识 前言 最近涉及一个移动端项目 需要把其中的图片变成可预览的图片 听学弟说 可以利用viewer进行实现 首先 我们需要做的就是先写一个简单demo 先实现其中的效果 实现效果 代码 <!doct…

android 论坛_如何看待百度android吧萎靡现象与吧主的无所作为

百度android吧当初被誉为贴吧中的机锋论坛&#xff0c;现如今缺惨不忍睹&#xff0c;这一切究竟是百度资本家的阴谋还是吧主个人无所作为&#xff1f;然而就此事本人与android吧吧主展开讨论以及对其能力的质疑…这本来只是对android吧吧主随意加精普通的质问…然而该吧主却说我…

logisim优先编码器怎么用_变频电机为什么要用编码器?又该如何选型?

在自动化控制中经常会碰到各种电机的控制&#xff0c;在输送带、升降机、提升小车等较大功率的电机大部分是用变频电机&#xff0c;各个品牌PLC变频器驱动控制变频电机也很普及了。但是&#xff0c;用户经常会有这样那样的问题出现&#xff1a;变频电机为什么要装编码器?不装编…

修复计算机语言设置是哪个键,Windows语言设置后修复计算机的方法

当我们给我们的windows语音设置后&#xff0c;电脑可能会出现点问题&#xff0c;这个时候我们需要修复一下计算机&#xff0c;其中要进入BIOS的操作可能会难倒一部分新手用户&#xff0c;那么该如何操作呢&#xff1f;接下来我给大家整理了该如何一步步设置&#xff0c;一起来了…

笔记本电脑摄像头不能用_聊一款想代替笔记本电脑的产品

每次苹果发布iPad&#xff0c;部分自媒体KOL的言论总让我有一种自己必须转行的错觉&#xff0c;因为在他们眼中&#xff0c;笔记本电脑即将被iPad代替了&#xff0c;甚至还有人称iPad为“笔记本杀手”。谢谢&#xff0c;有被笑到。但一想到诺基亚当年就是这么傲慢地对待iPhone&…

EXCEL数据汇总-数据透视图

转载于:https://www.cnblogs.com/RogerLu/p/11194629.html

android menu菜单 实现点击后不消失_教你修改Windows万年不变的黄色文件夹,让文件也不枯燥...

Windows系统发展至今&#xff0c;文件夹的颜色和样式始终是没有太多的变化&#xff0c;一直是一成不变的shi黄色&#xff01;尽管我们可以通过右键>属性>自定义>来修改文件夹的图标&#xff0c;但这种方法不仅需要我们自己去找图标文件&#xff0c;如果文件夹多了&…

电源功耗压力测试软件,开关电源负载测试经验分享——这篇三分钟小文章着实令人“心动”...

开关电源&#xff0c;又称交换式电源、开关变换器&#xff0c;是一种高频化电能转换装置&#xff0c;是电源供应器的一种。开关电源利用的切换晶体管多半是在全开模式及全闭模式之间切换&#xff0c;这两个模式都有低耗散的特点&#xff0c;切换之间的转换会有较高的耗散&#…

ref是什么意思_终于有人说出A股不敢说的话:为什么股价不断下跌,大单却持续流入,你知道是什么缘由吗?...

(本文由公众号越声策略(yslc188)整理&#xff0c;仅供参考&#xff0c;不构成操作建议。如自行操作&#xff0c;注意仓位控制和风险自负。)炒股想成功牢记以下几点&#xff1a;第一、选股方法。字面意思很简单&#xff0c;但是也是个集大成的东西。你靠着均线能选股&#xff0c…

xp计算机关闭139端口,小编搞定xp系统电脑关闭139端口的图文方法

我们在使用xp系统的过程中,经常需要对xp系统电脑关闭139端口进行设置&#xff0c;可能很多用户都不知道怎么对xp系统电脑关闭139端口进行设置&#xff0c;但当我们遇到对xp系统电脑关闭139端口的设置方法非常简单&#xff0c;只需要点击“开始”&#xff0c;选择“运行”&#…

c++中计算2得n次方_《一元二次方程》单元试卷,从中总结出5个考点,初三学生应知道...

俗话说&#xff1a;“工欲善其事&#xff0c; 必先利其器。 ” 学好一元二次方程必须熟练掌握它的重要考点&#xff0c;再通过有针对性地做练习&#xff0c;提高解题能力。为了帮助大家切身感受一元二次方程这章的重要考点&#xff0c;下面将为大家详细解析一份单元模拟试卷&am…

maya计算机内存不足请保存,Maya内存不足不能渲染怎么优化场景?

Maya内存不足不能渲染怎么优化场景&#xff1f;可能由于Maya的场景文件过于复杂&#xff0c;或者材质质量过高的问题&#xff0c;用户最终渲染时会出现无法启用高质量的渲染工作的错误&#xff0c;这时候用户可以选择做一些合适的处理&#xff0c;以保证渲染工作的正常进行。Ma…

vc6开发一个抓包软件_惊奇软件[21]:这是一个程序员开发的背单词网站,可好用了!...

惊奇软件未经授权禁止转载正文---------------------------------哔哩哔哩小破站的UP主们就是厉害......就在前几天&#xff0c;小编我想找一款背单词的软件(某百词用的有点腻)&#xff0c;想到哔哩哩哩上的朋友们都比较年轻&#xff0c;喜欢学习&#xff0c;我就上哔哩哔哩搜索…

执行计划中的参数解释

执行计划中的各个参数解释&#xff1a; 一、Recursive calls &#xff08;递归调用&#xff09; 1、参考&#xff1a;Oracle Database Reference, 10g Release 2 (10.2).pdf第916页 Number of recursive calls generated at both the user and system level. Oracle maintains …

java jsonobject_Java实现QQ登录

准备工作1. 云服务器2. 备案的域名3. 本地调试需要修改hosts文件&#xff0c;将域名映射到127.0.0.1一、申请QQ互联&#xff0c;并成为开发者QQ互联&#xff1a;QQ互联官网首页登录后&#xff0c;点击头像&#xff0c;进入认证页面&#xff0c;填写信息&#xff0c;等待审核。审…

周至四中计算机老师,周至县第四中学顺利承办周至县 “教育信息化技术与教学课堂深度融合交流研讨会”...

原标题&#xff1a;周至县第四中学顺利承办周至县 “教育信息化技术与教学课堂深度融合交流研讨会”5月22日&#xff0c;周至县 “教育信息化技术与教学课堂深度融合交流研讨会”在我校举行&#xff0c;周至县教科局党委书记、局长张武祥、副局长尚雷、教研室书记杨正良、电教中…

bin文件怎么转换成文本文档_Python脚本4:根据txt文本,批量创建文件夹

背景&#xff1a;深度学习图像分类的时候&#xff0c;有许多的标签类。1000个标签就需要创建1000个文件夹&#xff0c;文件夹里面放入对应的图像。不可能一个一个右击创建文件夹&#xff0c;所以有了今天的脚本。根据txt文本每一行的类别&#xff0c;创建文件名为类别的文件夹。…

电脑home键在哪_电脑键盘各键的名称及使用方法

电脑键盘各键的名称及使用方法如下&#xff1a;1. Tab键&#xff1a;表格键&#xff0c;是baiTable的缩写&#xff0c;中文意思是表格。在电脑中的应用主要是在文字处理软件里(如Word)起到等距离移动的作用。2、Esc键&#xff1a;退出键&#xff0c;是Escape的缩写&#xff0c;…

ajax加载vue数据,详解使用Vue.Js结合Jquery Ajax加载数据的两种方式

整理文档&#xff0c;搜刮出一个使用vue.js结合jquery ajax加载数据的两种方式的代码&#xff0c;稍微整理精简一下做下分享。废话不多说&#xff0c;直接上代码html代码demo{{message }}测试jquery加载数据{{data.name}}{{data.url}}{{data.country}}js代码/*** created by se…

程序员如何跟领导提离职_员工辞职不交接工作被领导怒怼:我不批离职,跟你耗着,结果蒙了...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都会有分享&#xff0c;都是免费订阅&#xff0c;请您放心关注。注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供…