Js 终止递归

js 编写递归方法,当查找到指定节点后:

1. 递归并不会停止,直到所有节点遍历结束之后,才会停止,会有性能损耗。

2. 递归成功后,如何返回查找到的值?

代码如下:

/**

 * @description: 树节点查到指定id

 * @param {Number} findId 要查找的id

 * @param {Array} array 遍历的数组

 * @param {String} findKey 要对比的key

 * @returns: 

 */

var findTreeId = (findId, array, findKey='id') => {

    for (let index = 0; index < array.length; index++) {

        const element = array[index];

        if (element[findKey] == findId) {

            return element;

        } else if (element.children.length) {

            let result = findTreeId(findId, element.children, findKey='id')

            // 这个判断很重要,在没有返回值的情况下才进行递归

            if (result) {

                return result;

            }

        }

    }

    return null;

};

数据如下:

var treedata = [
            {
                id: 1,
                name: 123,
                pid: 0,
                children: [
                    {
                        id: 2,
                        name: 223,
                        pid: 1,
                        children: [
                            { id: 31, name: 311, pid: 2, children: [] },
                            { id: 32, name: 322, pid: 2, children: [] }
                        ]
                    },
                    {
                        id: 3,
                        name: 22222,
                        pid: 1,
                        children: [{ id: 41, name: 223232, pid: 3, children: [] }]
                    }
                ]
            },
            {
                id: 5,
                name: 55,
                pid: 0,
                children: [
                    {
                        id: 51,
                        name: 5111,
                        pid: 5,
                        children: [
                            { id: 511, name: 123, pid: 51, children: [] },
                            { id: 512, name: 31222, pid: 51, children: [] }
                        ]
                    }
                ]
            }
        ];

运行:console.log('findTreeId',findTreeId(511,treedata));

结果即返回查找的节点,并且查到后,不再继续遍历

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值