递归的使用,树形结构的重组

普通数组转成tree格式

 const list = [
        { id: 1001, parentId: 0, name: 'AA' },
        { id: 1002, parentId: 1001, name: 'BB' },
        { id: 1003, parentId: 1001, name: 'CC' },
        { id: 1004, parentId: 1003, name: 'DD' },
        { id: 1005, parentId: 1003, name: 'EE' },
        { id: 1006, parentId: 1002, name: 'FF' },
        { id: 1007, parentId: 1002, name: 'GG' },
        { id: 1008, parentId: 1004, name: 'HH' },
        { id: 1009, parentId: 1005, name: 'II' },
    ]
    function getTree(ary, parentId = 0) {
        return ary.filter(v => v.parentId === parentId).map(v => {
            const children = getTree(ary, v.id);
            if (children.length) v.children = getTree(ary, v.id);
            return v
        });
    }

    console.log(getTree(list))

树形结构转成name属性拼接

const cityData = [
        {
            id: 'axzx',
            name: '广东省',
            children: [
                {
                    id: 'sdsd',
                    name: '深圳市',
                    children: [
                        { id: '45dss', name: '南山区' },
                        {
                            id: 'sdsd11',
                            name: '福田区',
                            children: [{ id: 'ddrr2', name: 'A街道' }],
                        },
                    ],
                },
                {
                    id: '2323d',
                    name: '东莞市',
                    children: [
                        { id: 'xxs2', name: 'A区' },
                        { id: 'kklio2', name: 'B区' },
                    ],
                },
            ],
        },
    ]
// 

    //递归 
    function getData(cityData) {
        let nameArr = []
        let dfs = function (arr, str = '', index = 1) {
            if (index > arr.length) {
                nameArr.push(str)
            } else {
                arr.forEach((item, i) => {
                    if (item.children) {
                        dfs(item.children, str + item.name, i++)
                    } else {
                        nameArr.push(str + item.name)
                    }
                });
            }
        }
        dfs(cityData)

        return nameArr

    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值