golang 無限極樹的結構化返回
阿新 • • 發佈:2022-05-09
從一篇部落格上學習到的方式。作用於樹狀資料處理返回,很巧妙,學習到了,記錄下來。
實現思路
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就是處理後的資料,僅供參考