递归就是自己调用自己。
需要注意的是,在使用递归的使用一定要加上循环终止条件,不然容易造成死循环。
递归可以实现阶乘,例如实现5的阶乘。
function a(n){
if(n == 1){
return 0;
}
return n * a(n-1);
}
console.log(a(5));//输出结果为120
递归也可以循环数组,我们先看一下for循环数组:
function forTest(){
for(let i in arrList){
console.log(arrList[i]);
}
}
forTest();
递归循环数组内容:
function recursive() {
const testFun = function (i) {
console.log(arrList[i])
if(i == arrList.length - 1){//这里是循环终止条件
return;
}
i++;
testFun(i)//在函数内部自己调用自己
}
testFun(0)
}
recursive()
从数据data中提取数据,下面是一个数组,现在我们需要取出 背心 短裤 连衣裙 休闲裤 拉面丸子 咪咪虾条 绿豆糕 手撕面包
var data = [{
name: "全部分类",
children:[
{
name:"衣服",
children:[
{name:"男装",children:[{name:"背心"},{name:"短裤"}]},
{name:"女装",children:[{name:"连衣裙"},{name:"休闲裤"}]}
]
},
{
name:"食品",
children:[
{name:"网红零食",children:[{name:"拉面丸子"},{name:"咪咪虾条"}]},
{name:"糕点",children:[{name:"绿豆糕"},{name:"手撕面包"}]}
]
}
]
}]
//可以用遍历的方法去实现,遍历一层一层有一层,终于可以实现我们的需求了。
var bldata = function () {
var str = ""
data.forEach(function(row){
row.children.forEach(function(row){
row.children.forEach(function(row){
row.children.forEach(function(row){
str += (row.name +",")
})
})
})
})
console.log(str)
}
bldata();
//下面使用递归来实现我们的需求
var dgdata = function(){
var str = '';
var dg = function(list){
list.forEach(function(row){
if(row.children){
dg(row.children);
}else{
str += row.name+","
}
})
}
dg(data);
console.log(str);
}
dgdata()