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))

 

posted @ 2019-05-23 10:06  hellojinjin123  阅读(1303)  评论(0)    收藏  举报