vue递归查找id对应的对象

将递归得到的对象push到数组中

let selections = [];
for (let leaf of this.tree) {
    let result = this.recursion(this.items, leaf);
    selections.push(result);
 }

递归函数

recursion(data, id) {
      let result;
      if (!data) {
        return;
      }
      for (var i = 0; i < data.length; i++) {
        let item = data[i];
        if (item.id === id) {
          result = item;
          break;
        } else if (item.children && item.children.length > 0) {
          result = this.recursion(item.children, id);
        }
      }
      console.log(result);
      return result;
    },

this.items为树结构的数据

items: [
        {
          id: 1,
          name: 'Vuetify Human Resources',
          children: [
            {
              id: 2,
              name: 'Core team',
              children: [
                {
                  id: 201,
                  name: 'John'
                },
                {
                  id: 202,
                  name: 'Kael'
                },
                {
                  id: 203,
                  name: 'Nekosaur'
                },
                {
                  id: 204,
                  name: 'Jacek'
                },
                {
                  id: 205,
                  name: 'Andrew'
                }
              ]
            },
            {
              id: 3,
              name: 'Administrators',
              children: [
                {
                  id: 301,
                  name: 'Ranee'
                },
                {
                  id: 302,
                  name: 'Rachel'
                }
              ]
            },
            {
              id: 4,
              name: 'Contributors',
              children: [
                {
                  id: 401,
                  name: 'Phlow'
                },
                {
                  id: 402,
                  name: 'Brandon'
                },
                {
                  id: 403,
                  name: 'Sean'
                }
              ]
            }
          ]
        },
        {
          id: 5,
          name: 'Example',
          children: [
            {
              id: 501,
              name: 'qaz'
            }
          ]
        },
        {
          id: 6,
          name: 'Qdd',
          children: [
            {
              id: 601,
              name: 'yui'
            }
          ]
        }
      ],

tree为树选中的数据[201,202,203]
在递归中我想要得到id所在的对象,在第一个方法中push到数组中形成一个数组集合,现在递归方法出现了问题得到的result为undefined,请各位帮我看下?

阅读 7.3k
2 个回答

已解决

// recursion(data, current) {
    //   var result = null;
    //   if (!data) {
    //     return;
    //   }
    //   for (var i = 0; i < data.length; i++) {
    //     var item = data[i];
    //     if (item.id === current) {
    //       result = item;
    //       return result;
    //     }
    //     if (item.children && item.children.length > 0) {
    //       result = this.recursion(item.children, current);
    //       if (result) return result;
    //     }
    //   }
    // },

关键问题在于,如何结束递归,你的递归函数即使找到了值,在返回上层递归的时候,上层递归的for循环还会继续执行下去,因此会覆盖原来的找到值,最终返回undefined,正确代码如下:

recursion(data, id) {
  let result;
  if (!data) {
    return;
  }
  for (var i = 0; i < data.length; i++) {
    let item = data[i];
    if (item.id === id) {
      result = item;
      break;
    } else if (item.children && item.children.length > 0) {
      result = this.recursion(item.children, id);
      if(result) return result // 关键代码:如果找到,就直接返回,结束后面的循环
    }
  }
  console.log(result);
  return result;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题