所以我们正在编程课程中练习功能性的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;
}
答案 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]));