使用递归函数-.shift()问题

时间:2019-02-18 17:33:12

标签: javascript arrays recursion

这是我要提出的问题,以便我可以理解我遇到的错误-请原谅我缺乏知识和了解。

我试图编写一个递归函数来反转数组。我有一个可以反转字符串的函数,并且我正在尝试使用类似的技术来反转数组。我知道有很多方法可以解决此问题,但我很想知道为什么这行不通-显然这与在输入数组上调用的.shift()方法有关。

这是我的反转字符串的代码:

function revStr(str){
  if (str.length === 0) return "";
  return revStr(str.substring(1)) + str[0];
};
revStr("hello");

这是我要在数组上使用的代码:

function revStr(arr){
  if (arr.length === 0) return "";
  return revStr(arr.shift()) + arr[0];
};
revStr([1, 2, 3, 4]);

为什么我会收到“ arr.shift不是函数”?

非常感谢。

1 个答案:

答案 0 :(得分:0)

此代码将按预期工作:

function revStr(arr){
  if (arr.length === 0) return "";
  var s = arr.shift();
  return revStr(arr) + s;
};
revStr([1, 2, 3, 4]);