原始数据:
pid代表父级id 0代表顶级,现在要把二级分类归类到顶级分类中作为一个二维数组返回
var (
topMenuArr = make([]map[string]interface{}, 0) //顶级菜单切片数组-列表
secondaryMenuArr = make(map[uint32][]interface{}, 0) //二级菜单切片数组-列表
resList = make(map[string]interface{}, 0) //上下级拼装map-对象
resListArr = make([]map[string]interface{}, 0) //最终返回结果列表切片-数组
)
list, err := models.GetMenuList("id,pid,title,url_value")
if err != nil {
return nil, err
}
fmt.Println(list)
for _, v := range list {
var (
topMenu = make(map[string]interface{}, 0) //顶层菜单map对象
secondaryMenu = make(map[string]interface{}, 0) //二级菜单map对象
)
//顶级目录
if v.Pid == 0 {
topMenu["id"] = v.Id
topMenu["pid"] = v.Pid
topMenu["title"] = v.Title
topMenu["subordinate"] = map[string]interface{}{}
topMenuArr = append(topMenuArr, topMenu) //切入切片
} else {
secondaryMenu["id"] = v.Id
secondaryMenu["pid"] = v.Pid
secondaryMenu["title"] = v.Title
secondaryMenuArr[v.Pid] = append(secondaryMenuArr[v.Pid], secondaryMenu) //写入map切片
}
}
for _, val := range topMenuArr {
for key1, val1 := range secondaryMenuArr {
if key1 == val["id"] {
resList = val
resList["subordinate"] = val1
}
}
resListArr = append(resListArr, resList)
}
fmt.Println(resListArr)
最终数据:
[map[id:1 pid:0 subordinate:[map[id:6 pid:1 title:增加用户] map[id:7 pid:1 title:编辑权限] map[id:8 pid:1 title:删除账号]] title:账号管理] map[id:2 pid:0 subordinate:[map[id:9 pid:2 title:数据总览] map[id:10 pid:2 title:新增
设备统计] map[id:11 pid:2 title:活跃设备统计]] title:数据统计] map[id:3 pid:0 subordinate:[map[id:12 pid:3 title:库存现状] map[id:13 pid:3 title:出入库管理] map[id:14 pid:3 title:出/入库] map[id:15 pi
d:3 title:渠道管理]] title:库存管理] map[id:4 pid:0 subordinate:[map[id:16 pid:4 title:Score查看] map[id:17 pid:4 title:Score审核] map[id:18 pid:4 title:Score配置] map[id:19 pid:4 title:Score上/下架]
map[id:20 pid:4 title:Note配置] map[id:21 pid:4 title:Note上/下架]] title:Library管理]]