我有一个问题,我无法理解。如果我正在可能无限的数据结构中寻找具有某个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
到达对象。
答案 0 :(得分:1)
是这种情况。当您进入“ 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;
}
}
}
希望这会对您有所帮助。谢谢
答案 1 :(得分:0)
您需要存储中间结果,并且仅返回找到的对象。
function findCategory(object, id) {
var temp;
if (object.id === id) {
return object;
}
object.categories.some(o => temp = findCategory(o, id));
return temp;
}
var data = { id: 0, categories: [{ id: 1, categories: [{ id: 2, categories: [] }, { id: 3, categories: [] }, { id: 4, categories: [] }] }] }
result = findCategory(data, 3);
console.log(result);