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.遞歸實現的快速排序比普通遍歷實現的排序效率更好。