js多叉树的剖析及完成

js多叉树的剖析及完成

好了,终究回到了第一篇文章提到的构造构造的多叉树完成,有了前两篇文章的基本,多叉树的完成也就变得简朴了

从背景拿到的原始数据情势为

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},
];

这是一个典范的多叉树构造,总部直接下级单位有工程部测试部临盆部计划部市场部;个中工程部测试部又有下级部门…

请求转换成的数据格式是

const json={
  总部 : {
    工程部 : {
      工程部1 : {
        工程部1 : {
        },
      },
    },
    测试部 : {
      测试部1 : {
      },
      测试部2 : {
      }
    },
    销售部 : {
      销售部1 : {
      },
      销售部2 : {
      }
    },
    售后部 : {
    }
  }
};

须要的数据情势为json嵌套对象,而且每一个对象只保存属性名,所以分两步举行操纵

1.应用原始数据天生构造机构列表树,应用递归推断id并天生多叉树

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);
  }

}

须要注重的几点:

  1. 天生树构造起首找出根节点,并递归增加其他子节点

  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);

以上,给有须要的朋侪,也为本身做一个纪录^ ^

    原文作者:zorroyz
    原文地址: https://segmentfault.com/a/1190000008257540
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞