m叉树转数组

// m叉树转数组

const obj = {

    id: 1,

    name: "部门1",

    pid: 0,

    children: [

        {

            id: 2,

            name: "部门2",

            pid: 1,

            children: []

        },

        {

            id: 3,

            name: "部门3",

            pid: 1,

            children: [

                {

                    id: 4,

                    name: "部门4",

                    pid: 3,

                    children: [

                        {

                            id: 5,

                            name: "部门5",

                            pid: 4,

                            children: []

                        }

                    ]

                }

            ]

        }

    ]

}

// 递归

/**

 * @param {obj: object, res: array}

 * @return {arr: array}

 */

function fn(obj, res = []) {

    res.push(obj);

    if (obj.children && obj.children.length) {

        for (const item of obj.children) {

            fn(item, res);

        }

    }

    return res;

}


 

// 循环

function fn2(obj) {

    const stack = [];

    const res = [];

    stack.push(obj);

    while (stack.length) {

        const item = stack[0];

        res.push(item);

        stack.shift();

        if (item.children && item.children.length) {

            stack.push(...item.children);

        }

    }

    return res;

}

// 循环2//最优解

function fn3(root){

    const stack = [];

    const res = [];

    stack.push(root);

    while(stack.length){

        let obj = stack.shift();

        let curObj = {}

        for(let key of Reflect.ownKeys(obj)){

            if(key === 'children'){

                for(let item of obj[key]){

                    stack.push(item);

                }

            }else{

                curObj[key] = obj[key];

            }

        }

        res.push(curObj);

    }

    return res;

}


 

console.log(fn3(obj));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值