Javascript: recursive function returns undefined for existing value

淺唱寂寞╮ 提交于 2020-11-25 03:30:15

问题


I am trying to loop an array using a recursive function. The loop should stop and return the value of the key, if it matches a given regex pattern.

The loop stops correctly when the condition is met. However, it only returns the key's value if the match occurs for the first key (index 0) in the array and returns 'undefined' for the rest.

Where's my mistake? Here's the code to better illustrate:

    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:


You have to return the value from the recursive call,

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

The final call for the function loop will return a value, but the other calls for the same function returns undefined. So finally you end up in getting undefined



来源:https://stackoverflow.com/questions/36069423/javascript-recursive-function-returns-undefined-for-existing-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!