猿问

递归函数如何返回正确值?

有如下递归函数,无法返回正确的结果:
constnavItems=[
{
name:'name1',
label:'人事管理',
items:[
{
name:'name2',
label:'员工管理',
items:[
{
name:'name3',
label:'员工管理-0',
items:[
{
name:'name4',
label:'员工管理-0-0',
items:'',
},
{
name:'name5',
label:'员工管理-0-1',
items:'',
},
],
},
{
name:'name6',
label:'员工管理-1',
items:'',
},
],
},
{
name:'name7',
label:'部门管理',
items:[
{
name:'name8',
label:'部门管理1',
items:'',
},
{
name:'name9',
label:'部门管理2',
items:'',
},
],
},
{
name:'name10',
label:'职位管理',
items:[
{
name:'name11',
label:'职位管理1',
items:'',
},
{
name:'name12',
label:'职位管理2',
items:'',
},
],
},
],
},
];
constnavName='name12';
constgetSelectedLabel=(navItems,navName)=>{
letselectedLabel;
constfindSelectedLabel=(items,name)=>{
items.forEach((item)=>{
if(item.name===name){
selectedLabel=item.label;
}elseif(item.items&&Array.isArray(item.items)){
findSelectedLabel(item.items,name);
}
});
};
findSelectedKey(navItems,navName);
returnselectedLabel;
};
想要通过递归函数,根据name值找到对应的label值,但是函数先返回了undefined,再执行到了赋值,应该怎么修改才对?还有我本来写的是不要嵌套外层函数:
constfindSelectedLabel=(items,name)=>{
items.forEach((item)=>{
if(item.name===name){
returnitem.label;
}elseif(item.items&&Array.isArray(item.items)){
findSelectedLabel(item.items,name);
}
});
};
findSelectedLabel(navItems,navName)
直接找到后返回这个值,但是也是不对的...虽然函数走到了return这句话,但并没有终止整个函数,最后返回的还是undefined.
很多人说运行结果是对的,那是因为刚好name4在第一层里,如果使用navName=name12,就不对了...还有使用for循环也不对...使用for循环以后,它只递归第一层,只会一层层往里递归,而不会进入for循环...
谢谢各位大神~
肥皂起泡泡
浏览 242回答 2
2回答

动漫人物

你的递归终止条件在哪里呢?--------------------更新------------------------请您先仔细了解一下forEach函数的用法,return不会终止这个函数的,223.
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答