平级数据转换为树形结构

/**

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

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

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

    */

    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;

    },

你可能感兴趣的:(平级数据转换为树形结构)