为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2019-05-21 10:36:19
有如下递归函数,无法返回正确的结果: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循环...谢谢各位大神~
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

你的递归终止条件在哪里呢?
--------------------更新------------------------请您先仔细了解一下forEach函数的用法,return不会终止这个函数的,223.
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 241 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信