js 递归实现,平级结构聚合成树形结构(一维数组转树形多维数组)

js 递归实现,平级结构聚合成树形结构(一维数组转树形多维数组)

function formatData() {
      // data,元数据
      var data = {
          col: 3,
          dataList: [
            { 1: '总公司', level: 1, orgCode: null, id: 'ta1237Wh' },
            { 1: '分公司', level: 1, orgCode: '10000001', id: '678AEEta7Wh' },
            { 1: '分公司', 2: '电信运营商', level: 2, orgCode: '10000001', id: 'Gyqta7Wh4v' },
            { 1: '总公司', 2: '消费洞察', level: 2, orgCode: '10000002', id: '7t4YNW38' },
            { 1: '总公司', 2: '消费洞察', 3: '电信', level: 3, orgCode: '100010', id: 'ycHWilk' },
            { 1: '总公司', 2: '银行金融', level: 2, orgCode: '10000003', id: 'WjbNYp1G' },
          ],
          conditionPage: { pageNo: 1, total: 10, pageSize: 10, pageTotal: 1 }
        };
      
      // 构建好的树形结构,其中仅包含dataList
      var treeData = [];
      var i = 0;
      // 赋值第一级
      data.dataList.forEach((element) => {
        if (element.level === 1) {
          treeData[i] = element
          i++
        }
      });
      // 递归剩余层级
      treeData.forEach((temp) => {
        this.getTreeData(data.dataList, 1, temp)
      })
      // 获取结果
      console.log('treeData===〉', treeData);
    };
    function getTreeData(list, level, data) {
      var i = 0
      var childData = []
      var level2 = level + 1
      list.forEach((element) => {
        // 层级相同,且父级一致
        if (element.level === level2 && data[level] === element[level]) {
          childData[i] = element;
          i++
          this.getTreeData(list, level2, element)// 递归
        }
      })
      // 赋值数据
      data.child = childData;
    }
    formatData()
  • 输出的tree形数据架构
    在这里插入图片描述
    2. 使用for循环, 一维数组转三维数组
 var { dataList } = data;

    var result = [];

    dataList.forEach((item, index) => {
      var { level, id, orgCode } = item;
      var obj = {
        name: "",
        level: level,
        id: id,
        orgCode,
        children: [],
      }
      if (!result[item['1']]) {
        obj['name'] = item['1'];
        result[item['1']] = obj;
      } else if(result[item['1']] && typeof(item['3'])=="undefined") {
        obj['name'] = item['2'];
        result[item['1']].children.push(obj);
      } else {
        var {children} = result[item['1']];
        children.forEach(jtem => {
          if(jtem.name == item['2']) {
            obj['name'] = item['3'];
            var _obj = delete  obj.children;
            jtem.children.push(obj);
          }
        });
      }
    })
    var data = Object.values(result);
    console.log(data);
  • 输出结果
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值