数组转树最佳代码,浅克隆引用数据类型,只需要 数组内的元素遍历两便,即可得到最终结果,可以将map data result 都打印出来理解一下
function toTree(data) { let result = []; if (!Array.isArray(data)) { return result; } data.forEach((item) => { delete item.children; }); let map = {}; data.forEach((item) => { map[item.sysAppServer] = item; }); data.forEach((item) => { let parent = map[item.pid]; if (parent) { (parent.children || (parent.children = [])).push(item); } else { result.push(item); } }); return result;}
var source = [ { sysTenant: 1, sysApp: 1, sysAppServer: 1, appServerName: '首页', }, { sysTenant: 1, sysApp: 1, sysAppServer: 10, appServerName: '租户管理', }, { sysTenant: 1, sysApp: 1, sysAppServer: 18, appServerName: '部门管理', }, { sysTenant: 1, sysApp: 1, sysAppServer: 24, appServerName: '用户管理', }, { sysTenant: 1, sysApp: 1, sysAppServer: 32, appServerName: '角色管理', }, { sysTenant: 1, sysApp: 1, sysAppServer: 3, appServerName: '查询', pid: 2, }, { sysTenant: 1, sysApp: 1, sysAppServer: 4, appServerName: '新建', pid: 2, }, { sysTenant: 1, sysApp: 1, sysAppServer: 5, appServerName: '编辑', pid: 2, }, { sysTenant: 1, sysApp: 1, sysAppServer: 6, appServerName: '删除', pid: 2, }, { sysTenant: 1, sysApp: 1, sysAppServer: 7, appServerName: '排序', pid: 2, }, { sysTenant: 1, sysApp: 1, sysAppServer: 8, appServerName: '启用', pid: 2, }, { sysTenant: 1, sysApp: 1, sysAppServer: 9, appServerName: '停用', pid: 2, }, { sysTenant: 1, sysApp: 1, sysAppServer: 11, appServerName: '查询', pid: 10, }, { sysTenant: 1, sysApp: 1, sysAppServer: 12, appServerName: '新建', pid: 10, }, { sysTenant: 1, sysApp: 1, sysAppServer: 13, appServerName: '编辑', pid: 10, }, { sysTenant: 1, sysApp: 1, sysAppServer: 14, appServerName: '删除', pid: 10, }, { sysTenant: 1, sysApp: 1, sysAppServer: 15, appServerName: '排序', pid: 10, }, { sysTenant: 1, sysApp: 1, sysAppServer: 16, appServerName: '启用', pid: 10, }, { sysTenant: 1, sysApp: 1, sysAppServer: 17, appServerName: '停用', pid: 10, }, { sysTenant: 1, sysApp: 1, sysAppServer: 17, appServerName: '停用', pid: 3, }, { sysTenant: 1, sysApp: 1, sysAppServer: 19, appServerName: '查询', pid: 18, }, { sysTenant: 1, sysApp: 1, sysAppServer: 20, appServerName: '新建', pid: 18, }, { sysTenant: 1, sysApp: 1, sysAppServer: 21, appServerName: '编辑', pid: 18, }, { sysTenant: 1, sysApp: 1, sysAppServer: 22, appServerName: '删除', pid: 18, }, { sysTenant: 1, sysApp: 1, sysAppServer: 23, appServerName: '排序', pid: 18, }, { sysTenant: 1, sysApp: 1, sysAppServer: 25, appServerName: '查询', pid: 24, }, { sysTenant: 1, sysApp: 1, sysAppServer: 26, appServerName: '新建', pid: 24, }, { sysTenant: 1, sysApp: 1, sysAppServer: 27, appServerName: '编辑', pid: 24, }, { sysTenant: 1, sysApp: 1, sysAppServer: 28, appServerName: '删除', pid: 24, }, { sysTenant: 1, sysApp: 1, sysAppServer: 29, appServerName: '排序', pid: 24, }, { sysTenant: 1, sysApp: 1, sysAppServer: 30, appServerName: '启用', pid: 24, }, { sysTenant: 1, sysApp: 1, sysAppServer: 31, appServerName: '停用', pid: 24, }, { sysTenant: 1, sysApp: 1, sysAppServer: 33, appServerName: '查询', pid: 32, }, { sysTenant: 1, sysApp: 1, sysAppServer: 34, appServerName: '新建', pid: 32, }, { sysTenant: 1, sysApp: 1, sysAppServer: 35, appServerName: '编辑', pid: 32, }, { sysTenant: 1, sysApp: 1, sysAppServer: 36, appServerName: '删除', pid: 32, }, { sysTenant: 1, sysApp: 1, sysAppServer: 37, appServerName: '排序', pid: 32, }, { sysTenant: 1, sysApp: 1, sysAppServer: 38, appServerName: '用户审批', }, { sysTenant: 1, sysApp: 1, sysAppServer: 2, appServerName: '应用管理', }, ];