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);
}
}
须要注重的几点:
天生树构造起首找出根节点,并递归增加其他子节点
代码中的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);
以上,给有须要的朋侪,也为本身做一个纪录^ ^