【问题标题】:Why this code is returning undefined?为什么此代码返回未定义?
【发布时间】:2016-04-25 13:01:40
【问题描述】:
var rarr = [];
var reverseArray = function(arr) {
  if(arr[0]) {
     rarr.push(arr[arr.length-1]);
     arr.pop();
     reverseArray(arr);
  } else {
    return rarr;
  }
}

console.log(reverseArray(["A", "B", "C"]));

虽然 rarr 的调试值最后是 ['C','B','A'],但它返回的是 undefined。提前致谢。

【问题讨论】:

  • 尽管到目前为止给出的答案中存在return 错误,但测试arr[0] 以获取循环终止是可怕的 - 如果您的数组中的任何元素成立,它就会中断虚假值(例如零)
  • 感谢您的指出。 :)

标签: javascript recursion array-reverse


【解决方案1】:

虽然 rarr 的调试值最后是 ['C','B','A'] ,而不是它 正在返回未定义

您没有返回递归调用将返回的值

替换

reverseArray(arr);

return reverseArray(arr);

或者干脆

console.log(["A", "B", "C"].reverse());

【讨论】:

  • 哎呀..错过了..谢谢。您可以建议任何其他优化方式吗?
  • @kamalkokne 只是 ["A", "B", "C"].reverse()
  • reverse() 是完美的,但我正在寻找没有反向方法的优化解决方案。谢谢
  • @kamalkokne 类似于var reverseArray = function(arr) { var rarr = []; while(arr.length > 0 ) { rarr.push(arr.pop()); } return rarr; } 没有递归。
【解决方案2】:

你忘记在你的 if... 中返回一个返回值:试试这个:

var rarr = [];
var reverseArray = function(arr) {
  if(arr[0]) {
     rarr.push(arr[arr.length-1]);
     arr.pop();
     return reverseArray(arr);
  } else {
    return rarr;
  }
}

console.log(reverseArray(["A", "B", "C"]));

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 2021-03-11
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多