资讯专栏INFORMATION COLUMN

js多叉树的分析及实现

lucas / 1041人阅读

摘要:多叉树的分析及实现好了,终于回到了第一篇文章提到的组织结构的多叉树实现,有了前两篇文章的基础,多叉树的实现也就变得简单了从后台拿到的原始数据形式为总部工程部工程部工程部工程部测试部测试部测试部生产部规划部市场部这是一个典型的多叉树结构,总部

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

需要注意的几点:

生成树结构首先找出根节点,并递归添加其他子节点

代码中的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);

以上,给有需要的朋友,也为自己做一个记录^ ^

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81404.html

相关文章

  • 叉树全路径遍历

    摘要:前言本文研究的是如何对一个多叉树进行全路径的遍历,并输出全路径结果。问题构建现在存在一个多叉树,其结点情况如下图,需要给出方法将叶子节点的所有路径进行输出。 多叉树全路径遍历 本文为原创作品,首发于微信公众号:【坂本先生】,如需转载请在文首明显位置标明转载于微信公众号:【坂本先生】,否则追究其法律责任。 前言 本文研究的是如何对一个多叉树进行全路径的遍历,并输出全路径结果。该问题的研究...

    MartinHan 评论0 收藏0
  • js遍历二叉树叉树结构

    摘要:二叉树的层级遍历创建一个二叉树输出函数先访问左子树,再访问自身,再访问右子树先访问自身,再访问左子树,再访问右子树先访问左子树,再访问右子树再访问自身层级遍历多叉树的层级遍历创建一个多叉树输出函数递归遍历每个节点方法方法方法层级遍历每 1、二叉树的层级遍历 创建一个二叉树 class Binary{ constructor(data,left,right){ this.data...

    junbaor 评论0 收藏0
  • 项目中用到的树形数据

    摘要:经过分析和思考,我决定不采用递归的方式来编写树形数据的处理,最终选用来维护树节点之间的关系。以权限树为例,做一个树形数据工具类的设计。 1.简介 ​ 在一些管理系统中一般都会用到,会用到一些树形数据,例如部门组织以及权限等数据,都得生成树形数据,需要写一些树形数据生成工具,一般使用递归的方式,性能低下还可能会导致爆栈。经过分析和思考,我决定不采用递归的方式来编写树形数据的处理,最...

    douzifly 评论0 收藏0
  • 其外部存储

    摘要:切记,红黑树在旋转和颜色变换的过程中,必须遵守红黑树的几条规则。树的外部存储磁盘布局计算机中的机械磁盘是由磁头和圆盘组成,每个圆盘上划分为多个磁道,每个磁道又划分为多个扇区。 术语 showImg(https://segmentfault.com/img/bVbai3r?w=643&h=407); 根     树最顶端的节点称为根,一棵树只有一个根 父节点     每个节...

    _Dreams 评论0 收藏0

发表评论

0条评论

lucas

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<