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.递归实现的快速排序比普通遍历实现的排序效率更好。