好了,終於回到了第一篇文章提到的組織結構的多叉樹實現,有了前兩篇文章的基礎,多叉樹的實現也就變得簡單了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);
以上,給有須要的朋友,也爲本身作一個記錄^ ^