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就是处理后的数据,仅供参考
浙公网安备 33010602011771号