从树中查找符合条件的节点-递归算法

const tree = [

    {

        id: '1',

        name: '营销体系',

        children: [

            {

                id: '1-1',

                name: '营销体系-南区开发团队'

            }

        ]

    },

    {

        id: '2',

        name: '交付体系'

    }

]

 

const findNodeById = (nodes, id) => {

    for (const node of nodes) {

        // 找到目标节点,直接返回,递归结束

        if (node.id === id) {

            // 这里会有两种情况:

            // 1. 如果这里不是在递归中,node会作为调用处的返回值,函数结束

            // 2. 如果这里是在递归中,node会作为递归调用处的返回值(赋值给foundNode的地方),当前层的递归结束

            return node

        }

        // 未找到目标节点,如果存在children,则将其作为nodes和原始id一起递归调用findNodeById

        if (node.children) {

            const foundNode = findNodeById(node.children, id)

            // 找到目标节点,直接返回,递归结束

            if (foundNode) {

                return foundNode

            }

        }

    }

    // 未目标节点,递归结束

    return null

}

 

const res = findNodeById(tree, '1-1');

console.log(res);

//  {"id":"1-1","name":"营销体系-南区开发团队"}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值