通过子级Id向上找到所有的父级id

 运用场景:
一个树形数据结构,后台返回最后一层的子集的id , 因为是联级选择器,我需要拿到所有的由所有父级id 组成的数组。

嵌套的级数是不确定的。

 

 const data = [
            {
                id: 1,
                name: '大别墅',
                children: [
                    {
                        id: 11,
                        name: '卧室'
                    },
                    {
                        id: 12,
                        name: '卧室2'
                    },
                    {
                        id: 13,
                        name: '卧室3'
                    },
                    {
                        id: 14,
                        name: '厨房',
                        children: [
                            {
                                id: 141,
                                name: '厨房2',
                                children:[
                                    {
                                        id: 1413,   
                                        name: '冰箱'
                                    }
                                ]
                            },
                            {
                                id: 148,
                                name: '厨房3',
                            }
                        ]
                    },
                ]
            },
            {
                id: 2,
                name: '小公寓',
                children: [
                    {
                        id: 21,
                        name: '房间1'
                    },
                    {
                        id: 22,
                        name: '房间2'
                    },
                    {
                        id: 23,
                        name: '房间23'
                    },
                    {
                        id: 24,
                        name: '房间24'
                    },
                ]
            }
        ];

        console.log(find(data, 24)) 

        function find  (array, id) {
            let stack = [];
            let going = true;
            let walker = (array, id) => {
                array.forEach(item => {
                    if (!going) return;
                    stack.push(item['id']);
                    if (item['id'] === id) {
                        going = false;
                    } else if (item['children']) {
                        walker(item['children'], id);
                    } else {
                        stack.pop();
                    }
                });
                if (going) stack.pop();
            }
            walker(array, id);
            return stack.join(',');
        }

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值