js递归函数return结果

最近刚做了一个项目,用到了递归,需要我自己用最底层的id一层一层的往上找,然后把找到的名字连成一个面包屑导航,我就想啊,写个递归还挺简单的嘛
js递归函数return结果_第1张图片
但是,当时我就想把递归的结果return出来,始终无法成功,结果取了个巧出来了,但是我不服啊!于是自己写了一个demo,特喵的居然一次性成功了,不说了,项目有这样顺利该多好!!!
js递归函数return结果_第2张图片
先上代码吧,我用了一个json文件模拟这棵树,先截个图
js递归函数return结果_第3张图片
js递归函数return结果_第4张图片
直接上代码吧

注意:js递归想要把结果return出去的话,条件判断调用自己的时候也要return着调用,要是不一级一级的往上return,你return给谁看?你return又有什么意义?


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>递归returntitle>
head>
<body>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js">script>
    <script>
        async function getTree(){
            let last = await $.get('tree.json');
            console.log(last);
            let data = last.data;
            let obj1 = findFather(data,'dataSetId',4);
            console.log('这个是数据集那一层',obj1);
            let obj2 = findFather(data,'directoryId',obj1.directoryId);
            console.log('这个是分类那一层',obj2);
            let obj3 = findFather(data,'directoryId',obj2.directoryId);
            console.log('这个是目录级那一层',obj3);
        }
        getTree();
        function findFather(arr,name,id){
            for(let i = 0; i < arr.length;i++){
                if(arr[i][name] == id){
                    return arr[i];
                }else if(arr[i].children){
                    return findFather(arr[i].children,id);//return调用
                }else if(arr[i].list){
                    return findFather(arr[i].list,id);//return调用
                }
            }
        }
    script>
body>
html>

最后我们来看下结果
js递归函数return结果_第5张图片
js递归函数return结果_第6张图片
js递归函数return结果_第7张图片

你可能感兴趣的:(JavaScript)