js 平行数据转化为树形结构
const list = [ {taskUuid: 1, name: '超级管理', parentTaskUuid: 0}, {taskUuid: 2, name: '用户管理', parentTaskUuid: 1}, {taskUuid: 3, name: '部门管理', parentTaskUuid: 1}, {taskUuid: 4, name: '日志管理', parentTaskUuid: 1}, {taskUuid: 5, name: '操作用户', parentTaskUuid: 2}, {taskUuid: 6, name: '查看用户', parentTaskUuid: 2}, {taskUuid: 7, name: '用户新增', parentTaskUuid: 5}, {taskUuid: 8, name: '用户删除', parentTaskUuid: 5}, {taskUuid: 9, name: '用户修改', parentTaskUuid: 5}, {taskUuid: 10, name: '操控部门', parentTaskUuid: 3}, {taskUuid: 11, name: '查看部门', parentTaskUuid: 3}, {taskUuid: 12, name: '部门新增', parentTaskUuid: 10}, {taskUuid: 13, name: '部门删除', parentTaskUuid: 10}, {taskUuid: 14, name: '部门修改', parentTaskUuid: 10}, {taskUuid: 15, name: '日志查看', parentTaskUuid: 4}, {taskUuid: 16, name: '日志导出', parentTaskUuid: 4} ]
/** * 树状的算法 * @params list 代转化数组 * @params parentId 起始节点 */ function getTrees(list, parentId) { let items= {}; // 获取每个节点的直属子节点,*记住是直属,不是所有子节点 for (let i = 0; i < list.length; i++) { let key = list[i].parentTaskUuid; if (items[key]) { items[key].push(list[i]); } else { items[key] = []; items[key].push(list[i]); } } return formatTree(items, parentId); } /** * 利用递归格式化每个节点 */ function formatTree(items, parentId) { let result = []; if (!items[parentId]) { return result; } for (let t of items[parentId]) { t.children = formatTree(items, t.taskUuid) result.push(t); } return result; } console.log(getTrees(list,0))

用作记录学习和工作中发现的问题,如有错误欢迎指教

浙公网安备 33010602011771号