JavaScript:递归函数对于现有值返回undefined

3
我正在尝试使用递归函数循环一个数组。如果匹配给定的正则表达式模式,循环应该停止并返回键的值。
当条件满足时,循环正确停止。但是,它只返回数组中第一个键(索引0)的值,如果匹配成功,并返回其余键的“undefined”。
我的错误在哪里?以下代码更好地说明了这个问题:
    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?!
1个回答

7
你需要从递归调用中返回值,
  // recall with updated index
  return loop(arr,i); 
}

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


感谢 @rajaprabhu! - ingo
@ingo 很高兴能帮忙!如果您认为这个答案对您有帮助,请尝试点击答案内部的勾号。但这并非强制要求。 :) - Rajaprabhu Aravindasamy
我做到了。 :) 不幸的是,我的低声望级别限制了我的赞成票公开显示。 - ingo
@ingo 你没注意到一个勾号吗?不是点赞那个 :) - Rajaprabhu Aravindasamy
1
我需要戴眼镜... :) 再次感谢! - ingo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接