2013-08-22 84 views
0

我似乎無法弄清楚爲什麼我的遞歸搜索不會遞歸行爲。我的JavaScript搜索遞歸循環出了什麼問題?

你看到有什麼問題嗎?我在錯誤的地方有haystack[i]嗎?因爲我沒有看到它。我試過在這個網站上查看例子,但是我找不到如此簡單的東西。

search = function(needle, haystack) { 

    len = haystack.length; 
    for (var i = 0; i < len; i++) 
    { 
     if (typeof haystack[i] == 'object') { 
      search(needle, haystack[i]) 
     } else { 
      if (needle == haystack[i]) { 
       console.log('found'); 
       return; 
      } 
      console.log('value: ' + haystack[i]) 
     } 
    } 
} 

var test = [[1], [2], [3,4], [5,6]] 
search(4, test) 

或者看到小提琴@http://jsfiddle.net/aniyishay/TBMmK/(打開控制檯)

回答

3

您在len前失蹤var,它應該是var len = haystack.length;否則將被視爲一個全局變量。

當haystack = [[1],[2],[3,4],[5,6]]然後len = 4但是再次調用search(4, [1])然後len = 1被分配,然後當循環返回值len = 1而不是原來的4,因爲它是一個全局變量。現在我= 2和len = 1所以循環存在

+0

@門將是的它會...你測試它 –

+0

@門把結賬http://jsfiddle.net/arunpjohny/qxfXb/1/ –

+0

嗯。這很有趣,爲什麼呢? (+1)爲什麼要將全局變量改爲本地的一個問題? – Doorknob