JS: 数组和树的相互转换

18 篇文章 4 订阅
这篇博客介绍了如何将数组转换为树形结构以及将树形结构转换回数组。通过`arrayToTree`函数实现了从数组到树的转换,而`tree2arr`函数则用于将树结构还原为数组。这些方法在数据组织和遍历中非常实用。
摘要由CSDN通过智能技术生成

一、数组转树

let arr = [{
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "111",
            "bdictDesc": "测试1",
            "bparentCode": "0",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "222",
            "bdictDesc": "测试2",
            "bparentCode": "0",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "333",
            "bdictDesc": "测试3",
            "bparentCode": "0",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "444",
            "bdictDesc": "测试4",
            "bparentCode": "0",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "555",
            "bdictDesc": "测试5",
            "bparentCode": "0",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA",
            "bdictDesc": "测试6",
            "bparentCode": "0",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA01",
            "bdictDesc": "测试7",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA0101",
            "bdictDesc": "测试8",
            "bparentCode": "DOCA01",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA0102",
            "bdictDesc": "测试9",
            "bparentCode": "DOCA01",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA0103",
            "bdictDesc": "测试10",
            "bparentCode": "DOCA01",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA02",
            "bdictDesc": "测试11",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA03",
            "bdictDesc": "测试12",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA0301",
            "bdictDesc": "测试13",
            "bparentCode": "DOCA03",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA0302",
            "bdictDesc": "测试14",
            "bparentCode": "DOCA03",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA04",
            "bdictDesc": "测试15",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA05",
            "bdictDesc": "测试16",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA06",
            "bdictDesc": "测试17",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA07",
            "bdictDesc": "测试18",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA08",
            "bdictDesc": "测试19",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA09",
            "bdictDesc": "测试20",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, {
            "categoryCode": "90000",
            "categoryCnName": "A1级别",
            "bdictCode": "DOCA10",
            "bdictDesc": "测试21",
            "bparentCode": "DOCA",
            "validStatus": "1"
        }, ]

        function arrayToTree(list, parentID) {
            const child = function(pareID) {
                //先定义一个数组,用于存储所查到的子元素
                const childs = [];
                //循环数组
                for (let i = 0; i < list.length; i++) {
                    //如果数组其中一项的bparentCode等于传入的,说明这一项是传入的子元素,把他push进数组,然后重复递归自己找该项的子元素
                    if (list[i].bparentCode === pareID) {
                        if (child(list[i].bdictCode).length > 0) {
                            list[i].children = child(list[i].bdictCode);
                        }
                        childs.push(list[i]);
                    }
                }
                //最后将查到的所有子元素返回
                return childs;
            };
            return child(parentID);
        }
        let res = arrayToTree(arr, '0')
        console.log(res);

二、树转数组

树转数组,实现的要点还是在于递归查找,定义一个空数组,去接收没有children属性的每一项

        let treeRes = [];

        function tree2arr(res) {
            res.forEach(item => {
                if (!item.children) {
                    treeRes.push(item)
                } else {
                    tree2arr(item.children)
                }
            })
        }
        // 此处的res取的是上边的数组转树的结果
        tree2arr(res)
        console.log(treeRes);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值