js递归数组遍历

 var list = this.linklist;
    var str = 4;
    var num = 0;
    var getStr = function (list) {
      list.forEach((row) => {
        if (row.clients) {
          row.xais = str + num + "%";
          num += 1;
          getStr(row.clients);
        } else {
          row.xais = str + num + "%";
        }
      });
    };
    getStr(list);
    console.log(list);

可以看到,递归的方式来实现的时候,我们只需要一个for循环,每次遍历接受到的数据,通过判断是否还有children,没有就代表是最后一级了,有就继续把children这个list传给函数继续遍历,最后就得到了我们想要的数据。

很明显,forEach的遍历的方式能实现多级的遍历,并且数据格式可以灵活一些,但是遍历的层级有限,而且对于未知层级的情况下,就无从下手了。
递归遍历,理论上,只要内存够用,你能实现任意层级的遍历,但缺点也很明显,没一个层级里面需要有固定的数据格式,否则无法遍历。

总结

1.很多时候可以用递归代替循环,可以理解为递归是一种特殊的循环,但通常情况下不推荐这样做。
2.递归一般是在函数里面把函数自己给调用一遍,通过每次调用改变条件,来结束循环。
3.递归在数据格式一致,在数据层级未知的情况下,比普通的遍历更有优势。
4.递归在异步的时候,更容易理解,且更容易实现,因为可以在异步的回调里面,调用自己来实现每次都能拿到异步的结果再进行其他操作。
5.递归实现的快速排序比普通遍历实现的排序效率更好。

posted @ 2022-01-21 17:54  土小狗  阅读(924)  评论(0编辑  收藏  举报