JS将平行的树状数据转化为树状数据

591 阅读1分钟

一、需求原因

平时前端开发有转化平行的树状数据为树状数据的需求,并且从某个节点过滤到当前节点和子节点的树状数据需求,于是便产生以下算法

    /**
       * @description 按照当前人员所在的部门为根节点将平行数据处理成树状数据
       * @param  items {Array} 一组平行的树状数据,例如[{parentId:1,id:11,label:'xxx'},{id:1,label:'xxx'},{parentId:11,id:111,label:'xxxx'}]
       */
          function arrayTransToTree(items) {
                  const result = [];   // 存放结果集
                  const itemMap = {};  // 
                  for (const item of items) {
                    const id = item.id;
                    const pid = item.pid;

                    if (!itemMap[id]) {
                      itemMap[id] = {
                        children: [],
                      }
                    }

                    itemMap[id] = {
                      ...item,
                      children: itemMap[id]['children']
                    }

                    const treeItem =  itemMap[id];

                    if (pid === 0) {
                      result.push(treeItem);
                    } else {
                      if (!itemMap[pid]) {
                        itemMap[pid] = {
                          children: [],
                        }
                      }
                      itemMap[pid].children.push(treeItem)
                    }

                  }
                  return result;
    }

志在帮助部分深夜还在开发的前端,后台没有时间组装树状数据的情况下,以方便查阅完成需求,不喜勿喷哈。