js多叉樹的分析及實現

js多叉樹的分析及實現

好了,終於回到了第一篇文章提到的組織結構的多叉樹實現,有了前兩篇文章的基礎,多叉樹的實現也就變得簡單了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

  1. 生成樹結構首先找出根節點,並遞歸添加其餘子節點element

  2. 代碼中的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);

以上,給有須要的朋友,也爲本身作一個記錄^ ^

相關文章
相關標籤/搜索