我有一个问题,我无法解决。如果我正在可能无限的数据结构中寻找具有某个ID的对象,如何遍历它,直到找到所需的对象并返回该对象?

如果这是我的数据,那么如何使用id === 3获取对象?

{
  id: 0,
  categories: [
    {
      id: 1,
      categories: [
        {
          id: 2,
          categories: [ ... ]
        },
        {
          id: 3,
          categories: [ ... ]
        },
        {
          id: 4,
          categories: [ ... ]
        },
      ]
    }
  ]
}


我尝试了以下方法:

findCategory = (categoryID, notesCategory) => {
  if (notesCategory.id === categoryID) {
    return notesCategory;
  }
  for (let i = 0; i < notesCategory.categories.length; i += 1) {
    return findCategory(categoryID, notesCategory.categories[i]);
  }

  return null;
};


但这对id === 3毫无意义。它使用id: 2检查对象,然后返回null。它永远不会通过id: 3到达对象。

这是一个JSbin:https://jsbin.com/roloqedeya/1/edit?js,console

最佳答案

就是这种情况。当您进入“ for”循环的第一次迭代时,由于有返回调用,执行将从函数中退出。您可以通过使用console.log在功能开始时打印当前对象来进行检查。

尝试这个

function find(obj, id) {
    if(obj.id === id) {
        console.log(obj) // just for testing. you can remove this line
        return obj
    } else {
        for(var i = 0; i < obj.categories.length; i++) {
            var res = find(obj.categories[i], id);
            if(res) return res;
        }
   }
}


希望这会帮助你。谢谢

09-30 16:10
查看更多