javascripot扁平数组转树形数组,并按指定字段排序。
扁平数据的数据结构
[{ "menuId": 108, "menuName": "系统管理", "parentMenuId": 0, "menuCode": "/", "menuUrl": "#", "iconUrl": null, "path": null, "depth": 1, "sortNum": 1, "isPower": true }, { "menuId": 99, "menuName": "园林管理", "parentMenuId": 0, "menuCode": "/", "menuUrl": "#", "iconUrl": null, "path": null, "depth": 1, "sortNum": 0, "isPower": true }, { "menuId": 100, "menuName": "园林首页", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/", "iconUrl": null, "path": null, "depth": 1, "sortNum": 1, "isPower": true }, { "menuId": 101, "menuName": "视频监控", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/admin/garden/video", "iconUrl": null, "path": null, "depth": 1, "sortNum": 2, "isPower": true }, { "menuId": 102, "menuName": "调试", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/admin/garden/debug", "iconUrl": null, "path": null, "depth": 1, "sortNum": 3, "isPower": true }, { "menuId": 103, "menuName": "区域", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/admin/garden/area", "iconUrl": null, "path": null, "depth": 1, "sortNum": 4, "isPower": true }, { "menuId": 104, "menuName": "硬件", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/admin/garden/hardware", "iconUrl": null, "path": null, "depth": 3, "sortNum": 5, "isPower": true }, { "menuId": 105, "menuName": "大屏参数设置", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/admin/garden/fullscreensetting", "iconUrl": null, "path": null, "depth": 1, "sortNum": 6, "isPower": true }, { "menuId": 106, "menuName": "设备安装", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/admin/garden/install", "iconUrl": null, "path": null, "depth": 1, "sortNum": 7, "isPower": true }, { "menuId": 110, "menuName": "预警消息", "parentMenuId": 99, "menuCode": "/", "menuUrl": "/admin/garden/alert/detail/", "iconUrl": null, "path": null, "depth": 1, "sortNum": 7, "isPower": true }, { "menuId": 109, "menuName": "园林管理", "parentMenuId": 108, "menuCode": "/", "menuUrl": "/admin/system/gardens/", "iconUrl": null, "path": null, "depth": 3, "sortNum": 1, "isPower": true }, { "menuId": 111, "menuName": "帐号管理", "parentMenuId": 108, "menuCode": "/", "menuUrl": "/admin/system/account", "iconUrl": null, "path": null, "depth": 3, "sortNum": 2, "isPower": true }, { "menuId": 112, "menuName": "企业管理", "parentMenuId": 108, "menuCode": "/", "menuUrl": "/admin/system/enterprise", "iconUrl": null, "path": null, "depth": 3, "sortNum": 3, "isPower": true }]
转换函数:
/** * @description: 生成树形菜单所需数据,无限级 * @param parentMenuId:父ID * @author 邹中兴 * @创建日期 2020/07/01 * @return: 无 */ generateTreeData(menus, parentMenuId) { // console.log(menus) let itemArr = []; for (let i = 0; i < menus.length; i++) { let menu = menus[i]; let node = null; if (menu.parentMenuId == parentMenuId) { node = { menuId: menu.menuId, label: menu.menuName, menuUrl: menu.menuUrl, parentMenuId: menu.parentMenuId, sortNum: menu.sortNum } node.children = this.generateTreeData(menus, menu.menuId); itemArr.push(node); } } itemArr = itemArr.sort((a, b) => { return a.sortNum - b.sortNum; }) return itemArr; },
生成结果
[{ "menuId": 99, "label": "园林管理", "menuUrl": "#", "parentMenuId": 0, "sortNum": 0, "children": [{ "menuId": 100, "label": "园林首页", "menuUrl": "/", "parentMenuId": 99, "sortNum": 1, "children": [] }, { "menuId": 101, "label": "视频监控", "menuUrl": "/admin/garden/video", "parentMenuId": 99, "sortNum": 2, "children": [] }, { "menuId": 102, "label": "调试", "menuUrl": "/admin/garden/debug", "parentMenuId": 99, "sortNum": 3, "children": [] }, { "menuId": 103, "label": "区域", "menuUrl": "/admin/garden/area", "parentMenuId": 99, "sortNum": 4, "children": [] }, { "menuId": 104, "label": "硬件", "menuUrl": "/admin/garden/hardware", "parentMenuId": 99, "sortNum": 5, "children": [] }, { "menuId": 105, "label": "大屏参数设置", "menuUrl": "/admin/garden/fullscreensetting", "parentMenuId": 99, "sortNum": 6, "children": [] }, { "menuId": 106, "label": "设备安装", "menuUrl": "/admin/garden/install", "parentMenuId": 99, "sortNum": 7, "children": [] }, { "menuId": 110, "label": "预警消息", "menuUrl": "/admin/garden/alert/detail/", "parentMenuId": 99, "sortNum": 7, "children": [] }] }, { "menuId": 108, "label": "系统管理", "menuUrl": "#", "parentMenuId": 0, "sortNum": 1, "children": [{ "menuId": 109, "label": "园林管理", "menuUrl": "/admin/system/gardens/", "parentMenuId": 108, "sortNum": 1, "children": [] }, { "menuId": 111, "label": "帐号管理", "menuUrl": "/admin/system/account", "parentMenuId": 108, "sortNum": 2, "children": [] }, { "menuId": 112, "label": "企业管理", "menuUrl": "/admin/system/enterprise", "parentMenuId": 108, "sortNum": 3, "children": [] }] }]