golang 无限极树的结构化返回

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

实现思路

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

代码示例

  

---------处理代码------------- 
       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"`
}

  

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

posted on 2022-05-09 16:18  studyphp  阅读(221)  评论(0编辑  收藏  举报

导航