平级数据转换为树形结构

/**

     * 该方法用于将有父子关系的数组转换成树形结构的数组

     * 接收一个具有父子关系的数组作为参数

     * 返回一个树形结构的数组

    */

    translateDataToTree(data){

      // 没有父节点的数据

      let parents = data.filter(value => value.upperCompanyCode == 0);

      // 有父节点的数据

      let children = data.filter(value => value.upperCompanyCode !== 'undefined' && value.upperCompanyCode != null);

      // 定义转换方法的具体实现

      let translator = (parents,children) => {


        // 遍历父节点数据

        parents.forEach((parent) => {

          // 遍历子节点数据

          children.forEach((current,index) => {

            // 此时找到父节点对应的一个子节点

            if(current.upperCompanyCode === parent.comCode){

              // 对子节点数据进行深拷贝,这里只支持部分类型

              let temp = JSON.parse(JSON.stringify(children));

              // 让当前子节点从temp中移除,temp作为新的子节点数据,这里是为了递归时,子节点的遍历次数更少,如果父子关系的层级越多,越有利

              temp.splice(index,1);

              // 让当前子节点作为唯一的父节点,去递归查找其对应的子节点

              translator([current], temp);

              typeof parent.children !== 'undefined' ? parent.children.push(current) : parent.children = [current]

            }

          })

        })



      };

      // 调用转换方法

      translator(parents,children);

      // 返回结果

      return parents;

    },

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对于树这个数据结构,第一次看到这个树肯定是一脸蒙逼,玛德,树?种树的那个树么?哈哈哈,当然不是,前面我们说过数组添...
    编程小世界阅读 3,101评论 0 0
  • 1. AVL树 AVL树简单来说是带有平衡条件的二叉查找树.传统来说是其每个节点的左子树和右子树的高度最多差1(注...
    fredal阅读 5,778评论 0 4
  • 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary...
    kanehe阅读 5,183评论 0 8
  • 医院外心脏骤停时,单纯胸外按压心肺复苏(CO-CPR)已成为标准CPR (S-CPR)的替代方法,即同时进行胸外按...
    DrDavidNC阅读 4,274评论 0 1
  • 我想说:切换成markdown模式的时候保存按钮被挡住了。。导致半天也没闹明白为啥没生效!!! 苍天啊!!这个代码...
    消魂泪阅读 7,824评论 2 0