场景
做cms时需要动态添加无限极菜单
代码
package main
import (
“encoding/json”
“fmt”
)
type A…
做cms时需要动态添加无限极菜单
package main
import (
"encoding/json"
"fmt"
)
type ArticleClass struct {
Id int `json:"id"`
PID int `json:"pid"`
Name string `json:"name"`
List []*ArticleClass `json:"list,omitempty"`
}
func main() {
test := `[{"id":1,"pid":0,"name":"a"},{"id":2,"pid":1,"name":"b"},{"id":3,"pid":1,"name":"c"}]`
var list []*ArticleClass // 假设已经赋值进去,从 数据库取出的数据
if err := json.Unmarshal([]byte(test), &list); err != nil {
return
}
data := buildData(list)
result := makeTreeCore(0, data)
temp, _ := json.Marshal(result)
fmt.Println(string(temp))
}
func buildData(list []*ArticleClass) map[int]map[int]*ArticleClass {
var data map[int]map[int]*ArticleClass = make(map[int]map[int]*ArticleClass)
for _, v := range list {
id := v.Id
fid := v.PID
if _, ok := data[fid]; !ok {
data[fid] = make(map[int]*ArticleClass)
}
data[fid][id] = v
}
return data
}
func makeTreeCore(index int, data map[int]map[int]*ArticleClass) []*ArticleClass {
tmp := make([]*ArticleClass, 0)
for id, item := range data[index] {
if data[id] != nil {
item.List = makeTreeCore(id, data)
}
tmp = append(tmp, item)
}
return tmp
}
如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。
本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。