`
nicegege
  • 浏览: 590916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

列表转换树形

阅读更多

今日,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转换树形菜单方法.md

    实用型List转换树形菜单方法

    把扁平化的数据转换成树形结构的JSON

    在许多应用场景中,我们可能需要将扁平化的数据结构转换为树形结构,以便更好地理解和操作数据。扁平化数据通常是线性的,而树形结构则能反映数据之间的层级关系,这对于表示目录、菜单、组织结构等非常有用。本话题...

    菜单树形结构,支持三级、多级树形结构代码

    1. **数据模型**:定义树形结构的节点对象,包括节点的ID、文本、子节点列表等属性。 2. **渲染函数**:将数据模型转换为HTML元素,呈现树形结构。 3. **事件处理**:绑定点击或其他交互事件,处理节点的展开、折叠...

    java动态树形菜单

    接着,JSP页面接收Servlet传递的数据,并将其转换为HTML,呈现为树形菜单。 实现步骤如下: 1. **数据模型**:创建一个表示菜单节点的Java类,如`MenuItem`,包含`id`、`name`、`parent_id`等属性,以及`children`...

    基于jqgrid实现树形菜单分页列表查询

    "基于jqgrid实现树形菜单分页列表查询"这一主题,旨在创建一个既能展示层级结构又能进行高效分页查询的表格组件。jqGrid是一款强大的jQuery插件,它提供了丰富的功能,如数据网格、分页、排序、过滤、编辑等,同时...

    下拉树形列表

    在处理这类数据时,需要编写解析函数,将原始数据转换为适合树形列表展示的格式。 在实现下拉树形列表时,还需要考虑以下几点: 1. **事件处理**:包括点击事件、展开/折叠事件等,这些事件需要绑定到每个节点上,...

    树形下拉列表 递归实现

    2. 将获取的数据库数据转换为前端可处理的树形结构。 3. 使用JavaScript或其他前端框架(如React)渲染树形下拉列表。 通过以上步骤,你可以成功创建一个交互式的树形下拉列表,允许用户方便地浏览和选择层级结构的...

    wpf_combobox_tree下拉树形控件

    对于树形ComboBox,我们需要创建一个模板,包含一个TextBox(显示当前选择)和一个Popup(作为下拉树形列表)。这个模板需要使用HierarchicalDataTemplate来展示树形数据。 2. **数据绑定**:WPF提供了强大的数据...

    JSP自定义标签(一)_树形下拉选择菜单

    ### JSP自定义标签——树形下拉选择菜单解析 #### 一、概念与应用场景 在JSP(Java Server Pages)开发中,自定义标签是一种非常实用的技术,它允许开发者创建可重用的代码组件,简化JSP页面的编写工作。本文档将...

    Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)

    树形列表,缩进显示层级,第5级数据加底色,数据样式显色,点击展开折叠数据。本文为用Vue实现方式,另有一篇为用knockout.js的实现方法。 html代码 &lt;table v-for=item v-bind:list=item&gt;&lt;/table&gt; 组件模板...

    详解vue-cli+element-ui树形表格(多级表格折腾小计)

    在本文档中,详细介绍了如何利用vue-cli结合element-ui框架构建一个树形表格(也就是多级表格)。在许多项目开发中,特别是在处理有层级关系的数据时,我们需要以树形结构来展示信息,以便用户能以直观的方式浏览和...

    Android多级树形选择列表

    3. **适配器实现**:编写自定义的适配器,将树形数据结构转换为适合显示的列表项。适配器需要处理节点的展开/折叠、选中状态的维护以及点击事件的处理。 4. **点击事件处理**:当用户点击一个节点时,适配器需要...

    thinkphp转layui树形组件

    在该文件中完整的展示了如何利用tp的模型从mysql取得数据,并进行无限分类,最终转换成layui树形组件所需正确格式,当然也添加了一些layui所需的自定义属性(例如:title、spread等),几乎每一行都有注释,也表明了...

    s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单.rar

    最后,“jquery-treeview”是jQuery的一个插件,专门用于将普通的HTML列表转换为可交互的树形视图。它可以轻松地展示无限级别的数据,并支持展开/折叠节点、添加自定义样式等功能。在这个项目中,jquery-treeview将...

    列表树形结构组件源码.zip

    列表树形结构组件在IT行业中,特别是在Android应用开发中,是一种常见的UI元素,它用于展示具有层级关系的数据。这种组件通常被用作多级菜单,允许用户以折叠和展开的方式探索不同级别的数据,使得信息组织更为清晰...

    基于layui实现树形穿梭框

    4. **数据转换**:layui的穿梭框组件默认支持扁平化的数据结构,而我们的数据源是树形结构,所以需要编写一个函数`convertTreeDataToTransfer`,将树形数据转换为穿梭框所需的格式。 5. **自定义样式和事件**:根据...

    Java递归算法构造JSON树形结构

    这种方法可以将复杂的树形结构数据转换成易于理解和处理的 JSON 格式。 在 Java 中,使用递归算法可以将树形结构数据处理成 JSON 格式。在这个示例代码中,我们使用了 json-lib.jar 包将 List 序列化成 JSON。首先...

    树形菜单插件

    jQuery Treeview是一款基于jQuery库的插件,它能够将HTML列表转换为可交互的树形结构。使用此插件,开发者可以轻松地实现节点的展开和折叠,以及自定义样式和事件处理。它支持多级嵌套,并且可以与Ajax配合使用,...

    bootstrap树形表格js插件demo

    这个文件实现了将普通表格转换为树形表格的功能。它可能包含了用于处理表格行展开和折叠的事件监听器,以及用于解析和展示层级数据的逻辑。可能还会有方法用于初始化表格,加载数据,以及响应用户交互,如点击表格行...

    Android 绘制多级树形选择列表实例代码

    3. 将树形结构转换为线性列表,通过前序遍历来实现。 三、具体实现 1. 定义数据模型 首先,我们定义一个抽象的`SimpleTreeNode`类,表示树中的节点。每个节点包含层级、父节点、子节点列表、选中状态和展开状态。...

Global site tag (gtag.js) - Google Analytics