今日,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转换树形菜单方法
在许多应用场景中,我们可能需要将扁平化的数据结构转换为树形结构,以便更好地理解和操作数据。扁平化数据通常是线性的,而树形结构则能反映数据之间的层级关系,这对于表示目录、菜单、组织结构等非常有用。本话题...
1. **数据模型**:定义树形结构的节点对象,包括节点的ID、文本、子节点列表等属性。 2. **渲染函数**:将数据模型转换为HTML元素,呈现树形结构。 3. **事件处理**:绑定点击或其他交互事件,处理节点的展开、折叠...
接着,JSP页面接收Servlet传递的数据,并将其转换为HTML,呈现为树形菜单。 实现步骤如下: 1. **数据模型**:创建一个表示菜单节点的Java类,如`MenuItem`,包含`id`、`name`、`parent_id`等属性,以及`children`...
"基于jqgrid实现树形菜单分页列表查询"这一主题,旨在创建一个既能展示层级结构又能进行高效分页查询的表格组件。jqGrid是一款强大的jQuery插件,它提供了丰富的功能,如数据网格、分页、排序、过滤、编辑等,同时...
在处理这类数据时,需要编写解析函数,将原始数据转换为适合树形列表展示的格式。 在实现下拉树形列表时,还需要考虑以下几点: 1. **事件处理**:包括点击事件、展开/折叠事件等,这些事件需要绑定到每个节点上,...
2. 将获取的数据库数据转换为前端可处理的树形结构。 3. 使用JavaScript或其他前端框架(如React)渲染树形下拉列表。 通过以上步骤,你可以成功创建一个交互式的树形下拉列表,允许用户方便地浏览和选择层级结构的...
对于树形ComboBox,我们需要创建一个模板,包含一个TextBox(显示当前选择)和一个Popup(作为下拉树形列表)。这个模板需要使用HierarchicalDataTemplate来展示树形数据。 2. **数据绑定**:WPF提供了强大的数据...
### JSP自定义标签——树形下拉选择菜单解析 #### 一、概念与应用场景 在JSP(Java Server Pages)开发中,自定义标签是一种非常实用的技术,它允许开发者创建可重用的代码组件,简化JSP页面的编写工作。本文档将...
树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 html代码 <table v-for=item v-bind:list=item></table> 组件模板...
在本文档中,详细介绍了如何利用vue-cli结合element-ui框架构建一个树形表格(也就是多级表格)。在许多项目开发中,特别是在处理有层级关系的数据时,我们需要以树形结构来展示信息,以便用户能以直观的方式浏览和...
3. **适配器实现**:编写自定义的适配器,将树形数据结构转换为适合显示的列表项。适配器需要处理节点的展开/折叠、选中状态的维护以及点击事件的处理。 4. **点击事件处理**:当用户点击一个节点时,适配器需要...
在该文件中完整的展示了如何利用tp的模型从mysql取得数据,并进行无限分类,最终转换成layui树形组件所需正确格式,当然也添加了一些layui所需的自定义属性(例如:title、spread等),几乎每一行都有注释,也表明了...
最后,“jquery-treeview”是jQuery的一个插件,专门用于将普通的HTML列表转换为可交互的树形视图。它可以轻松地展示无限级别的数据,并支持展开/折叠节点、添加自定义样式等功能。在这个项目中,jquery-treeview将...
列表树形结构组件在IT行业中,特别是在Android应用开发中,是一种常见的UI元素,它用于展示具有层级关系的数据。这种组件通常被用作多级菜单,允许用户以折叠和展开的方式探索不同级别的数据,使得信息组织更为清晰...
4. **数据转换**:layui的穿梭框组件默认支持扁平化的数据结构,而我们的数据源是树形结构,所以需要编写一个函数`convertTreeDataToTransfer`,将树形数据转换为穿梭框所需的格式。 5. **自定义样式和事件**:根据...
这种方法可以将复杂的树形结构数据转换成易于理解和处理的 JSON 格式。 在 Java 中,使用递归算法可以将树形结构数据处理成 JSON 格式。在这个示例代码中,我们使用了 json-lib.jar 包将 List 序列化成 JSON。首先...
jQuery Treeview是一款基于jQuery库的插件,它能够将HTML列表转换为可交互的树形结构。使用此插件,开发者可以轻松地实现节点的展开和折叠,以及自定义样式和事件处理。它支持多级嵌套,并且可以与Ajax配合使用,...
这个文件实现了将普通表格转换为树形表格的功能。它可能包含了用于处理表格行展开和折叠的事件监听器,以及用于解析和展示层级数据的逻辑。可能还会有方法用于初始化表格,加载数据,以及响应用户交互,如点击表格行...
3. 将树形结构转换为线性列表,通过前序遍历来实现。 三、具体实现 1. 定义数据模型 首先,我们定义一个抽象的`SimpleTreeNode`类,表示树中的节点。每个节点包含层级、父节点、子节点列表、选中状态和展开状态。...