js处理树状数据算法

var list = [{
                id: 1,
                name: '超级管理',
                parent_id: 0
            },
            {
                id: 2,
                name: '用户管理',
                parent_id: 1
            },
            {
                id: 3,
                name: '部门管理',
                parent_id: 1
            },
            {
                id: 4,
                name: '日志管理',
                parent_id: 1
            },{
                id: 5,
                name: '操作用户',
                parent_id: 2
            },
            {
                id: 6,
                name: '查看用户',
                parent_id: 2
            },
            {
                id: 7,
                name: '用户新增',
                parent_id: 5
            },
            {
                id: 8,
                name: '用户删除',
                parent_id: 5
            }]

/**
         * 树状的算法
         * @params list     代转化数组
         * @params parentId 起始节点
         */
        getTrees(list, 0)
        function getTrees(list, parentId) {
            let items = {};
            // 获取每个节点的直属子节点,*记住是直属,不是所有子节点
            for(let i = 0; i < list.length; i++) {
                let key = list[i].parent_id;
                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.id)
                result.push(t);
            }
            console.log(result)
            return result;
        }

 

posted @ 2017-09-21 10:02  ITxiaoning  阅读(1200)  评论(0)    收藏  举报