一.递归的使用环境
在写一些逻辑的时候,如果碰到一些很杂乱的数据,比如在一个多层嵌套数组找出你需要的数据,这时候是可以通过循环去循环数组去查找你需要的数据,但是如果这个数组并不是一两层,而是五六层,甚至更多,没有一个固定的层数,那么这个时候如果用循环不停去找这个数据并不是一个好的解决办法,而且循环每循环一层消耗的性能特别大,如果循环多了,就也会报超出执行栈的错误.
这个时候可以试试用递归解决这个困难的问题.
二.递归的概念
递归的概念非常简单,也就是在程序的函数中直接或间接的调用自己,并且必须要有一个跳出结果.
三.递归的步骤
- 假设递归函数已经写好
- 寻找递推关系
- 将递推关系的结构转换为递归体
- 将临界条件加入到递归体中
四.递归的写法
说了这么多,展示代码说明吧!!!
data: [
{
name: '1-1',
children: [
{
name: '1-1-1',
children: [
{
name: '1-1-1-1',
children: [],
},
{
name: '1-1-2-1',
},
],
},
{
name: '1-2-1',
},
{
name: '1-3-1',
},
],
},
{
name: '2-1',
},
{
name: '3-1',
},
{
name: '4-1',
},
],
就比如这个是后端返回的数据
如果需求是要查找最下一级的数据,但是因为数据嵌套的特别深,如果要拿到里面的数据,如果用循环可能用三个以上的循环才能拿到数据,这样的话可能消耗的性能特别大,甚至浏览器卡死
但是用递归就能解决这个困难的问题
send(task) {
for (const item of task) {
if ('children' in item) {
if (item.children.length === 0) {
delete item.children
} else {
this.send(item.children)
}
} else {
return
}
}
},```
这样的话可以极低的去消耗性能,每一次都去循环当层的数据,如果没找到再去找他的子集知道找到为止