概述

在工作中,很多时候会遇到树组织,但是从数据库里面查询出来的结果是一个简单的树组织,这就需要将简单的树组织转换为标准的树组织,以便使用,本文分享一个简单的function来实现简单到标准的转换。


简单和标准树组织数据

1、简单树组织

简单的树组织包含id,pid,attr等信息,是一个平铺的结构,如:

[
	{id:"0",pid:"-1",name:"name0"}, 
	{id:"01",pid:"0",name:"name01"}, 
	{id:"02",pid:"0",name:"name02"},
	{id:"011",pid:"01",name:"name011"},
	...
]
2、标准的树组织

标准的树组织跟简单的树组织的区别就是包含层级结构,如:

[
	{id:"0",pid:"-1",name:"name0",children:[
		{id:"01",pid:"0",name:"name01",children:[
			{id:"011",pid:"01",name:"name011"},
			...
		]}, 
		{id:"02",pid:"0",name:"name02"},
		...
	]},
	...
]

转换函数

        _transform2NormalData:function (sNodes){
            var scope = this;
            var i,l;
            var key = scope.data.simpleData.idKey,//"id"
                parentKey=scope.data.simpleData.pIdKey,//"pid"
                childKey=scope.data.childKey;//"children"
            if (!key || key=="" || !sNodes) return [];
            if (sNodes.length>0) {
                var r = [];
                var tmpMap = [];
                for (i=0, l=sNodes.length; i<l; i++) {
                    tmpMap[sNodes[i][key]] = sNodes[i];
                }
                for (i=0, l=sNodes.length; i<l; i++) {
                    if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
                        if (!tmpMap[sNodes[i][parentKey]][childKey])
                            tmpMap[sNodes[i][parentKey]][childKey] = [];
                        tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
                    }
                    else {
                        r.push(sNodes[i]);
                    }
                }
                return r;
            }
            else {
                return [sNodes];
            }
        }

---------------------------------------------------------------------------------------------------------------

技术博客

http://blog.csdn.NET/gisshixisheng

在线教程

http://edu.csdn.Net/course/detail/799
Github

https://github.com/lzugis/

联系方式

q       q:1004740957

e-mail:niujp08@qq.com

公众号:lzugis15

Q Q 群:452117357(webgis)
             337469080(Android)



posted on 2016-12-13 07:20  LZU-GIS  阅读(154)  评论(0编辑  收藏  举报