好了,终于回到了第一篇文章提到的组织结构的多叉树实现,有了前两篇文章的基础,多叉树的实现也就变得简单了javascript
从后台拿到的原始数据形式为java
const data = [ {"orgId":1,"orgName":"总部","parentId":0}, {"orgId":6,"orgName":"工程部","parentId":1}, {"orgId":7,"orgName":"工程部1","parentId":6}, {"orgId":8,"orgName":"工程部2","parentId":7}, {"orgId":9,"orgName":"工程部3","parentId":8}, {"orgId":10,"orgName":"测试部","parentId":1}, {"orgId":11,"orgName":"测试部1","parentId":10}, {"orgId":12,"orgName":"测试部2","parentId":11}, {"orgId":13,"orgName":"生产部","parentId":1}, {"orgId":14,"orgName":"规划部","parentId":1}, {"orgId":15,"orgName":"市场部","parentId":1}, ];
这是一个典型的多叉树结构,总部直接下级单位有工程部,测试部,生产部,规划部,市场部;其中工程部和测试部又有下级部门...json
要求转换成的数据格式是测试
const json={ 总部 : { 工程部 : { 工程部1 : { 工程部1 : { }, }, }, 测试部 : { 测试部1 : { }, 测试部2 : { } }, 销售部 : { 销售部1 : { }, 销售部2 : { } }, 售后部 : { } } };
须要的数据形式为json嵌套对象,并且每一个对象只保留属性名,因此分两步进行操做 this
1.利用原始数据生成组织机构列表树,利用递归判断id并生成多叉树code
2.在第一步生成多叉树的过程当中同时生成所需对象,使之符合须要的数据形式对象
代码以下递归
function MT(){ var OBJ={}; var CURRENT; var TEM; this.root=null; this.Node=function(e){ this.orgId=e.orgId; this.orgName=e.orgName; this.parentId=e.parentId; this.children=[]; } this.insert=function(e){ CURRENT=OBJ; function recursiveAdd(tem,e){ if(tem.orgId==e.parentId){ tem.children.push(e); CURRENT=CURRENT[tem.orgName]; CURRENT[e.orgName]={}; }else{ for(var i=0;i<tem.children.length;i++){ if(tem.orgName==TEM.orgName){ CURRENT=OBJ; } CURRENT=CURRENT[tem.orgName]; recursiveAdd(tem.children[i],e); } } } if(e!=undefined){ e=new this.Node(e); }else{ return; } if(this.root==null){ this.root=e; OBJ[e.orgName]={}; }else{ TEM=this.root; recursiveAdd(TEM,e); } console.log(OBJ); } }
须要注意的几点:ip
生成树结构首先找出根节点,并递归添加其余子节点element
代码中的CURRENT=CURRENT[tem.orgName],CURRENT[e.orgName]={};用来生成嵌套对象,这里涉及数据类型的指向,请看如下示例代码
var Ele = {}; function nested(element){ element['key'] = {}; element = element['key']; element['key1'] = {}; element = element['key1']; } nested(Ele); console.log(Ele);
以上,给有须要的朋友,也为本身作一个记录^ ^