2014-02-27 50 views
-1

IM試圖得到一個遞歸工作在JavaScript這是我的代碼
Recusion在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; 
} 

這段代碼peice的基本上是在數據的層次來搜索特定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

使用調試器。如果你使用了一個調試器(你的瀏覽器中內置了一個調試器),並且通過了代碼,你會很快看到出了什麼問題。 –

+0

哇倒了一個回答了2年前問過的問題。沒有評論。 –

回答

4

您開始循環訪問cats,但如果您看到有子項的條目,那麼您將遞歸到該條目中,然後終止循環。這意味着您在之後沒有看到任何cats那條目。

而不是

return getCategory(id, cat.Children); 

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

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

工作。謝謝 –