javascript中的递归 - 不是递归

时间:2014-02-27 10:41:13

标签: javascript recursion

我试图在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

我在做什么/做错了什么?

1 个答案:

答案 0 :(得分:4)

您开始循环遍历cats,但是如果您看到一个包含子项的条目,您将重新进入该条目,然后终止循环。这意味着您在条目之后看不到任何cats

而不是

return getCategory(id, cat.Children);

你需要调用它,只返回,如果它返回!null

value = getCategory(id, cat.Children);
if (value) {
    return value;
}