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就是处理后的数据,仅供参考