reduce处理树形结构数据

直接上代码

var data = [{

                id: 1,

                name: "办公管理",

                pid: 0,

                children: [{

                        id: 2,

                        name: "请假申请",

                        pid: 1,

                        children: [

                            { id: 4, name: "请假记录", pid: 2 },

                        ],

                    },

                    { id: 3, name: "出差申请", pid: 1 },

                ]

            },

            {

                id: 5,

                name: "系统设置",

                pid: 0,

                children: [{

                    id: 6,

                    name: "权限管理",

                    pid: 5,

                    children: [

                        { id: 7, name: "用户角色", pid: 6 },

                        { id: 8, name: "菜单设置", pid: 6 },

                    ]

                }, ]

            },

        ];

1.0:将树形结构处理为扁平数组

const arr = data.reduce(function(pre,item){

            const callee = arguments.callee //将运行函数赋值给一个变量备用

            pre.push(item)

            if(item.children && item.children.length > 0) item.children.reduce(callee,pre); //判断当前参数中是否存在children,有则递归处理

            return pre;

        },[]).map((item) => {

            item.children = []

            return item

        })

        console.log(arr)

2.0:将扁平数组处理为树形结构

let result = arr.reduce(function(prev, item) {

            prev[item.pid] ? prev[item.pid].push(item) : prev[item.pid] = [item];

            return prev;

        }, {});

        console.log(result)

        for (let prop in result) {

            result[prop].forEach(function(item, i) {

                result[item.id] ? item.children = result[item.id] : ''

            });

        }

        result = result[0];

        console.log(result)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。