递归数组反转Javascript

时间:2014-11-12 17:21:52

标签: javascript arrays functional-programming

所以我们正在编程课程中练习功能性的javascript,我只是不能让它正常工作。任何使这个代码工作的建议将不胜感激。除了身体之外的一切都给了我使用。以下是我的想法: (它总是向我发送第一个数组索引内容而不是全部反转。我尝试将其更改为

 if(arr.length <= 1) return arr;

但是从来没有达到基本情况。)

function ReverseArray(arr) {

//base case

if(arr.length == 1)
{
   return arr[0];
}
if(arr.length == 0)
{
   return 0;
}

var head = arr.pop;
var newArr = [head, ReverseArray(arr)];
return newArr;
}

3 个答案:

答案 0 :(得分:2)

x = y <--assignment
z == y <-- comparison 

查看您的代码:

if(arr.length = 1) 

需要

if(arr.length == 1)

与零检查相同


你不是在说pop

var head = arr.pop;

你需要括号

var head = arr.pop();

答案 1 :(得分:1)

这是一个带有工作函数的可运行示例。仅供参考,还有built-in功能可以为您完成此操作。

我认为除了与赋值/比较运算符的混淆之外,在构建结果数组时,你应该使用Array.concat()来连接你的数组,而不是你正在构建一个新数组,其中第二项是数组本身。

var a = [1,2,3,4,5];
console.log(ReverseArray(a));

function ReverseArray(arr) {
    if(arr.length < 2) {
        return arr;
    } else {
        return [arr.pop()].concat(ReverseArray(arr));
    }
}

答案 2 :(得分:1)

这是使用三元运算符在单行中完成此操作的最精确,最简洁的方法。

function reverse(arr) {
  return arr.length < 2 ? arr : [arr.pop()].concat(reverse(arr));
}
console.log(reverse([4, 3, 3, 1]));