递归查找

很多时候,我们通过网络请求返回后台数据之后,需要在前端页面中显示,通常有一些嵌套多个数组的数据,我们称之为‘树形结构’数据,
而我们通常碰到搜索题目id查找对应的数据,又或者我们打开了一个题目,需要点击下一题的时候,我们往往需要通过id去获取题目这个对象;
下面array其实就是多个题目对象组成,我们直接上代码;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
var array = [
{
id: 1,
title:"a",
children:[{
id:2,
children:[]
}]
},

{
id:3,
title:"b",
children:[]
},

{
id:4,
title:"c",
children:[
{
id:5,
title:"c1",
children:[
{
id:6,
title:"c2",
children:[]
},

{
id:7,
title:"c3",
children:[]
}
]
}
]
}
];

方法一:
var returnedItem;

var find = function(arr, id){
    arr.forEach((item) => { 
         if(item.id==id)
         {        
             returnedItem = item;
             return item;
         }
         else if(item.children.length > 0)
         {
             find(item.children, id);                        
         }                   
    })
}

var item = find(array, 7);
console.log(returnedItem);

方法二:

var returnedItem;

    var find = function(arr, id){
        for (var a = 0; a < arr.length; a++) {
            if(arr[a].id == id)
             {
                 returnedItem = arr[a];
                 return item;
             }
             else if(arr[a].children != undefined && arr[a].children.length > 0)
             {
                 find(arr[a].children, id);
             }else {
             }
        }
    }

    var item = find(array, 7);
    console.log(returnedItem);

其中7为你输入的id,得到的是id为7的对象;returnedItem.id和returnedItem.title就是我们想要的数据;

文章目录