账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    递归函数如何返回正确值?
    37
    0

    有如下递归函数,无法返回正确的结果:

    const navItems = [
          {
            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: '',
                  },
                ],
              },
            ],
          },
        ];
    
    const navName = 'name12';    
    
    const getSelectedLabel = (navItems, navName) => {
      let selectedLabel;
      const findSelectedLabel = (items, name) => {
        items.forEach((item) => {
          if (item.name === name) {
            selectedLabel = item.label;
          } else if (item.items && Array.isArray(item.items)) {
            findSelectedLabel(item.items, name);
          }
        });
      };
      findSelectedKey(navItems, navName);
      return selectedLabel;
    };

    想要通过递归函数,根据name值找到对应的label值,但是函数先返回了undefined,再执行到了赋值,应该怎么修改才对?
    还有我本来写的是不要嵌套外层函数:

    const findSelectedLabel = (items, name) => {
        items.forEach((item) => {
          if (item.name === name) {
            return item.label;
          } else if (item.items && Array.isArray(item.items)) {
            findSelectedLabel(item.items, name);
          }
        });
      };
    
    findSelectedLabel(navItems, navName)

    直接找到后返回这个值,但是也是不对的...虽然函数走到了return这句话,但并没有终止整个函数,最后返回的还是undefined.

    很多人说运行结果是对的,那是因为刚好name4在第一层里,如果使用navName = name12,就不对了...
    还有使用for循环也不对...使用for循环以后,它只递归第一层,只会一层层往里递归,而不会进入for循环...

    谢谢各位大神~

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部