【问题标题】:Javascript: recursive function returns undefined for existing valueJavascript:递归函数返回未定义的现有值
【发布时间】:2016-07-04 07:47:45
【问题描述】:

我正在尝试使用递归函数循环数组。 如果它与给定的正则表达式模式匹配,则循环应该停止并返回键的值。

当条件满足时循环正确停止。但是,它仅在数组中的第一个键(索引 0)发生匹配时返回键的值,其余部分返回“未定义”。

我的错误在哪里?这是更好地说明的代码:

    function loop(arr,i) {
  var i = i||0;
  if (/i/gim.test(arr[i])){
    console.log("key value is now: " + arr[i])
    return arr[i]; // return key value
  }
  // test key value
  console.log("key value: " + arr[i]); 

  // update index
  i+=1; 

  // recall with updated index
  loop(arr,i); 
}

console.log( loop(["I","am", "lost"]) ); 
// "key value is now: I"
// "I" <-- the returned value

console.log(  loop(["am", "I", "lost"])  ); 
// "key value: am" 

// "key value is now: I" <-- test log 
// undefined <-- but the return value is undefined! why?!

【问题讨论】:

    标签: javascript arrays function recursion


    【解决方案1】:

    你必须return递归调用的值,

      // recall with updated index
      return loop(arr,i); 
    }
    

    函数loop 的最终调用将返回一个值,但同一函数的其他调用返回undefined。所以最后你会得到undefined

    【讨论】:

    • 谢谢@rajaprabhu!
    • @ingo 很高兴为您提供帮助!如果您认为此答案对您有所帮助,请尝试按此答案中的刻度线。但这不是强迫。 :)
    • 我已经做到了。 :) 不幸的是,我的低声誉水平限制了我公开展示的赞成票。
    • @ingo 你没有注意到一个勾号吗?不是赞成票。 :)
    • 我需要眼镜... :) 再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多