`
nicegege
  • 浏览: 579643 次
  • 性别: 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规范,学到了知识的细节。例如不能有空格,必须使用双引号等。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics