zoukankan      html  css  js  c++  java
  • 如何将一个列表封装为一个树形结构

    后台将一个树状结构的数据,返回成了一个列表;

    如何将这个列表封装为树形结构呢?

    <script>
        var data = [{
            "area_id": 5,
            "name": "广东省",
            "parent_id": 0,
          },
          {
            "area_id": 6,
            "name": "广州市",
            "parent_id": 5,
          },
          {
            "area_id": 7,
            "name": "深圳市",
            "parent_id": 5,
          },
          {
            "area_id": 4,
            "name": "北京市",
            "parent_id": 3,
          },
          {
            "area_id": 3,
            "name": "北京",
            "parent_id": 0,
          },
        ]
    
        function setTreeData(arr) {
          // 删除所有的children,以防止多次调用
          arr.forEach(function (item) {
            delete item.children
          });
          let map = {}; //构建map
          arr.forEach(i => {
            map[i.area_id] = i; //构建以area_id为键 当前数据为值
          });
          let treeData = [];
          arr.forEach(child => {
            const mapItem = map[child.parent_id]; //判断当前数据的parent_id是否存在map中
            if (mapItem) { //存在则表示当前数据不是最顶层的数据
              //注意: 这里的map中的数据是引用了arr的它的指向还是arr,当mapItem改变时arr也会改变,踩坑点
              (mapItem.children || (mapItem.children = [])).push(child); //这里判断mapItem中是否存在child
            } else { //不存在则是顶层数据
              treeData.push(child)
            }
          })
          return treeData
        }
        console.log(setTreeData(data))
  • 相关阅读:
    JSP语法学习笔记
    jsp 自定义标签
    java排序算法
    Linux系统rootpassword改动
    人生中第一次面试——北漂18年(1)
    msgsnd的一个小问题
    推荐系统中的矩阵分解演变方式
    FZU 2124 FOJ 2124 吃豆人【BFS】
    啦啦啦啦、新人学习中。。
    【Linux】线程并发拷贝程序
  • 原文地址:https://www.cnblogs.com/wangqi2019/p/14154519.html
Copyright © 2011-2022 走看看