我试图在javascript中获取递归工作这是我的代码
var getCategory = null;
getCategory = function (id, cats) {
if (!cats || !cats.length) return null;
for (var i = 0; i < cats.length; i++) {
var cat = cats[i];
if (cat && cat.Id == id) {
return cat;
}
else if (cat && cat.Children && cat.Children.length) {
return getCategory(id, cat.Children);
}
}
return null;
}
此代码基本上是在数据层次结构中搜索特定id的特定元素。
例如,假设我的样本数据是
var sampleData = [
{Id : 1, Children : [{Id:11, Children:[]}, {Id : 12, Children : []}]},
{Id : 2, Children : [{Id:21, Children:[]}, {Id : 22, Children : []}, {Id : 23, Children : []}]},
{Id : 3, Children : [{Id:31, Children:[]}, {Id : 32, Children : []}, {Id : 33, Children : []}]}
]
问题在于,当我将此功能称为
时getCategoriy(21, sampleData); //it gives null
即使获得
getCategiry(11, sampleData); //gives perfect object back
我在做什么/做错了什么?
答案 0 :(得分:4)
您开始循环遍历cats
,但是如果您看到一个包含子项的条目,您将重新进入该条目,然后终止循环。这意味着您在条目之后看不到任何cats
。
而不是
return getCategory(id, cat.Children);
你需要调用它,只返回,如果它返回!null
:
value = getCategory(id, cat.Children);
if (value) {
return value;
}