go 把一个数据列表上下级菜单组装成二维数组

原始数据:

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管理]]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值