我有一个问题,我无法解决。如果我正在可能无限的数据结构中寻找具有某个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;
}
}
}
希望这会帮助你。谢谢