2014-10-27 68 views
1

我正在練習使用遞歸函數來解決一些簡單的javascript問題。javascript中的遞歸函數問題

我遇到了一個問題,用下面的代碼,

var locate = function(arr,value){ 
    for (var i=0; i <arr.length; i++) { 
     if(typeof arr[i]=== "string") { 
      console.log("string is string"); 
      if(arr[i]=== value) { 
       console.log("This should be true"); 
       return true; 
      } 
     } 
     else { 
      locate(arr[i], value); 
     } 
    } 
} 
console.log(locate(['d', 'a',['e', 'g']], 'e')); 

我不能讓這個程序返回true。它到達代碼的右邊部分,因爲它會打印上面的語句。

任何幫助,將不勝感激。我現在一直在嘲笑我的頭幾個小時。

Edit- @ Matt Burland指出了在調用遞歸時需要包含return語句的事實。

+0

這是什麼返回什麼呢? – 2014-10-27 20:58:55

+0

@LogicArtist:'undefined' – 2014-10-27 21:02:02

回答

2

當你遞歸的時候,你需要返回遞歸調用返回的值。

因此,在你else條款,您需要:

return locate(arr[i], value); 

var locate = function(arr,value){ 
 
    for (var i=0; i <arr.length; i++) { 
 
     if(typeof arr[i]=== "string") { 
 
      console.log("string is string"); 
 
      if(arr[i]=== value) { 
 
       console.log("This should be true"); 
 
       return true; 
 
      } 
 
     } 
 
     else { 
 
      return locate(arr[i], value); 
 
     } 
 
    } 
 
} 
 
alert(locate(['d', 'a',['e', 'g']], 'e'));