将平级数据转成树形数据

// 得到的平级的数据
  data: [{
        id: "8510000",
        pid: "0",
        title: "四川省"
    }, {
        id: "8510000_1",
        pid: "8510000",
        title: "BSS域"
    }, {
        id: "291a15bcd7f2b6059163ccccbd112e17",
        pid: "8510100_1",
        title: "成都测试系统5"
    }, {
        id: "66158d49d8f9e64616be21edb87247fe",
        pid: "8510100_1",
        title: "成都——测试四——上级是四川测试系统一"
    }, {
        id: "8510000_4",
        pid: "8510000",
        title: "EDA域"
    }, {
        id: "8510100_1",
        pid: "8510100",
        title: "BSS域",
    }, {
        id: "8510100",
        pid: "0",
        title: "成都",
    }];
// 数据格式转换的方法
 listToMap: function (tempData) {
        // 删除所有的children,以防止多次调用
        tempData.forEach(function (item) {
          delete item.children;
        });
        tempData.map(item => {
          item.label = item.title;
          item.value = item.id;
        });
        let map = {}; // 构建map
        tempData.forEach(i => {
          map[i.id] = i; // 构建以id为键 当前数据为值
        });
        let treeData = [];
        tempData.forEach(child => {
          const mapItem = map[child.pid]; // 判断当前数据的pid是否存在map中
          if (mapItem) {
            // 存在则表示当前数据不是最顶层的数据
            // 注意: 这里的map中的数据是引用了tempData的它的指向还是arr,当mapItem改变时arr也会改变,踩坑点
            (mapItem.children || (mapItem.children = [])).push(child); // 这里判断mapItem中是否存在child
          } else {
            // 不存在则是顶层数据
            treeData.push(child);
          }
        });
        return treeData;
      };
// 调用方法
   let treeArr = this.listToMap(data);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。