今日,java程序中碰到菜单权限枚举(Enum),把一组权限转换为树形,返回给前端VUE展现。4个系统的4个菜单权限枚举中,重复的出现列表转换为树形的代码。显然代码重复了,需要优化。平时,java类中重复代码,抽取放到父类。枚举已继承Enum,所以不能继承其他类。想到把列表转换树形的实现,放到前端。前端把这段代码,多个系统间共享一个转化方法。后台则减少大量重复代码。(ps:菜单权限枚举会增加,枚举会达到几十个左右)。
详细代码用例
//array数组转换为array树形,把叶子节点放到父节点中。parentCode是父节点code.根节点code=0;element为父节点元素 function coverToTree(array,parentCode,element){ for(var i=0;i<array.length;i++){ //一级节点 if(array[i].parentCode == 0){ if( array[i].tag ==1){continue;} array[i].tag=1; coverToTree(array,array[i].code,array[i]); }else if(array[i].parentCode == parentCode ){//非一级节点 if(element.childs == undefined ){ element.childs = new Array(); } var tmp = array[i]; element.childs.push(tmp); array.splice(i--,1); coverToTree(array,tmp.code,tmp); } } return array; } //测试用例 var a = [{"code":1,"parentCode":0},{"code":2,"parentCode":0},{"code":3,"parentCode":1},{"code":4,"parentCode":2},{"code":5,"parentCode":3}]; a = coverToTree(a,0); document.write(toString(a)); //js对象转换为json字符串.json字符串不能出现空格,否则不规范。 function toString(jsonObj){ if(jsonObj instanceof Array){ var jStr = "["; for(var i=0;i<jsonObj.length;i++){ var t = jsonObj[i]; jStr +=toString(t); if(jsonObj.length-1!=i){ jStr+=","; } } jStr += "]"; return jStr.replace(/\s+/g,''); }else{ var jStr = "{"; for(var item in jsonObj){ var myObj = jsonObj[item]; if(myObj instanceof Array){ jStr += "\""+item+"\":"+toString(myObj)+","; }else{ jStr += "\""+item+"\":\""+jsonObj[item]+"\","; } } jStr= jStr.slice(0,-1) + "}"; return jStr.replace(/\s+/g,''); } }
运行结果:
[{ "code": "1", "parentCode": "0", "tag": "1", "childs": [{ "code": "3", "parentCode": "1", "childs": [{ "code": "5", "parentCode": "3" }] }] }, { "code": "2", "parentCode": "0", "tag": "1", "childs": [{ "code": "4", "parentCode": "2" }] }]
总结:json序列化,没有使用工具方法,自己实现json规范,学到了知识的细节。例如不能有空格,必须使用双引号等。
相关推荐
实用型List转换树形菜单方法
树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 html代码 <table v-for=item v-bind:list=item></table> 组件模板...
在该文件中完整的展示了如何利用tp的模型从mysql取得数据,并进行无限分类,最终转换成layui树形组件所需正确格式,当然也添加了一些layui所需的自定义属性(例如:title、spread等),几乎每一行都有注释,也表明了...
易语言打造资源管理器源码 树型框+超级列表框例程。
一、概述 前段时间有个项目的需要在Android端...由于原始数据是树形结构的,我们需要先将树形结构转换为列表数据,类似根结点 – 父节点1 – 子结点1 – 子节点2 – 父节点2……这种形式 – 这恰恰是树的前序遍历
一、数据库父子结构数据设计 大部分采用 parentId的形式来存储父id,并且只存储父id,祖父Id不存储。也可以添加存储层级级别或者层级关系等字段。 CREATE TABLE `t_resource` ( `id` varchar(255) NOT NULL ...
通过这个树形菜单制作实例,你可以学习到几个对项目标识符进行操作的函数,同时还有将二进制表示的项目标识符列表转换成有可识的项目名,获得每个文件夹在系统中的图标,获得系统的图标列表,生成文件夹管理树等。
主要介绍了java编程两种树形菜单结构的转换代码,首先介绍了两种树形菜单结构的代码,然后展示了转换器实例代码,最后分享了相关实例及结果演示,具有一定借鉴价值,需要的朋友可以了解下。
Unity 将Excel 数据转换为Json 数据使用,可以支持列表嵌套。
java多叉树的实现:节点集合生成多叉树,单个节点添加到多叉树,深度遍历,广度遍历
几个对项目标识符进行操作的函数、将二进制表示的项目标识符列表转换成有可识的项目名、获得每个文件夹在系统中的图标、获得系统的图标列表、生成文件夹管理树等等技巧。 需要注意: ParentFolder: ...
今天将介绍一些最好的jQuery树形视图插件,具有扩展和可折叠的树视图。这些都是轻量级的,灵活的jQuery插件,它将一个无序列表转换为可展开和折叠的树。 Treeview – Expandable and Collapsible Tree jQuery ...
JS 将有父子关系的平行数组转换成树形数据 方法:双重遍历,一次遍历parentId,一次遍历id == parendId; 该方法应该能很容易被想到,实现起来也一步一步可以摸索出来; const oldData = [ {id:1,name:'boss',...
吧多层结构的excel表头 转换成树形结构的类 我自己写的 难免有bug 请多指教
前台: function listToTree(myId,pId,list){ function exists(list, parentId){ for(var i=0; i<list.length; i++){ if (list[i][myId] == parentId) return true; } return false;
Scala实用程序以递归方式遍历和转换JSON,如由列表和地图构成的树形结构 安装 没有Maven文物发布的喷气机。 添加此项目的一种方法是将直接依赖项添加到构建文件中的github存储库中 build.sbt: lazy val p = ...
一个jQuery插件,它允许转换成树形结构嵌套无序列表元素,然后按组织结构图般的输出。 它支持任何深度,单击每个项目可以显示/隐藏子水平,并拖动’N'下降从一个节点到另一个元素是可能的,该接口将相应地调整水平。...
包括对数组结构、树形结构、对象结构等数据进行 查询,排序,连接,合并,分组,分段,转换,遍历 等一系列功能.可以用精炼和易懂的代码实现比较复杂的操作.一开始,在 ES5 的时代,我觉得 js 对数组的操作实在太繁琐了. 可能...
主要介绍了JAVA后台转换成树结构数据返回给前端的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一个jQuery插件,它允许转换成树形结构嵌套无序列表元素,然后按组织结构图般的输出。 它支持任何深度,单击每个项目可以显示/隐藏子水平,并拖动’N'下降从一个节点到另一个元素是可能的,该接口将相应地调整水平。...