golang 无限极树的结构化返回

从一篇博客上学习到的方式。作用于树状数据处理返回,很巧妙,学习到了,记录下来。

实现思路

  1.获取所有数据list
  2.遍历所有数据list,转换为map。以唯一ID为key
  3.遍历所有数据list,(这里继续用list,是为了保证按照顺序输出)
  4.遍历中,取所有的父级ID。定义为一级子集。
  5.遍历中,如果存在父级ID。追加到父级的子集中。

代码示例

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
---------处理代码-------------
       list,total := 查询的全部数据
    treeMap := make(map[string]*treeItem, total)
    for _, v := range list {
        treeMap[v.FileId] = &treeItem{
            FileId:   v.FileId,
            FileName: v.FileName,
            ParentId: v.ParentId,
            Children: []*treeItem{},
        }
    }
 
    treeData := make([]*treeItem, 0, total) //全部的树状数据
    for _, v := range list {
        if v.ParentId == "" || v.ParentId == "0" {
            treeData = append(treeData, treeMap[v.FileId])
            continue
        }
        if vv, ok := treeMap[v.ParentId]; ok {
            vv.Children = append(vv.Children, treeMap[v.FileId])
        }
    }
 
---------处理代码-------------
 
type treeItem struct {
    FileId   string      `json:"file_id"`
    FileName string      `json:"file_name"`
    ParentId string      `json:"parent_id"`
    Children []*treeItem `json:"children"`
}

  

1
treeData就是处理后的数据,仅供参考

posted on   studyphp  阅读(222)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2020-05-09 systemd管理golang 服务进程

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示