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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js递归问题,请指教
    35
    0
    let list = [
          {
          id: '1',
          title: '人员管理',
          checked: true,
          children: [{
            id: '5',
            title: '厂家管理',
            checked: true,
            children: [{
              id: '6',
              title: '添加厂家',
              checked: true,
            },
            {
              id: '7',
              title: '操作',
              checked: true,
            }]
          },
          {
            id: '8',
            title: '会员管理',
            checked: true,
            children: [{
              id: '9',
              title: '交易明细',
              checked: true,
            },
            {
              id: '10',
              title: '启用/禁用',
              checked: false,
            }]
          }]
        }, 
        {
          id: '2',
          title: '交易查询',
          checked: true,
          children: [{
            id: '11',
            title: '操作',
            checked: false,
          }, {
            id: '12',
            title: '操作2',
            checked: true,
          }]
        }, 
        {
          id: '3',
          title: '测试测试',
          checked: true
        }
      ];

    这是一份获取到的数据,对象下有子级,需要根据id找出对应的那个对象。

    开始动手写,如下:

    function findIDobj(Arr,ID) {
          let result = null;
          for (let i = 0; i < Arr.length; i++) {//遍历第1级
    
            if (Arr[i].id == ID) {
              result = Arr[i]; //符合条件就赋值
            }
    
            if (Arr[i].children) { //如果有子级继续,遍历下一级
    
              for (let j = 0; j < Arr[i].children.length; j++) { //遍历第2级
                if (Arr[i].children[j].id == ID) {
                  result = Arr[i].children[j];
                }
    
                if (Arr[i].children[j].children) { //如果有子级继续,遍历下一级
    
                  for (let k = 0; k < Arr[i].children[j].children.length; k++) {//遍历第3级
                    if (Arr[i].children[j].children[k].id == ID) {
                      result = Arr[i].children[j].children[k];
                    }
                  }
                }
              }
            }
          }
          return result
        }
        console.log(findIDobj(list,9))

    好像能够根据id找到对象,但是这1大托代码看着就low啊。
    再改改,如下:

        let result = null;
    
        function findId(Arr, ID) {
          
          for (let i = 0; i < Arr.length; i++) {
            if (Arr[i].id == ID) {
              result = Arr[i]
            }
            if (Arr[i].children) {
              findId(Arr[i].children, ID)
            }
          }
          return result
        }
    
        console.log(findId(list, 9))

    递归一下,最后成这个样子,能够实现效果,但是我想把result封到函数里面,但是定义在里面最后return出来的值就为null了,原因也知道就是循环的时候又执行findId函数把result = null了。现在就像问一下如何才能把结果对象放到函数里面,不用在函数外面定义result

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 山河拱手 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部