2014-10-27 96 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'));