2014-11-12 3 views
0

Итак, мы практикуем функциональный javascript в моем классе программирования с этим заданием, и я просто не могу заставить его работать правильно. Любые советы по работе с этим кодом будут оценены по достоинству. Для меня было дано все, кроме тела. Вот что я придумал: (.. Он всегда посылает мне только первое содержимое индексного массива, а не все из них обращенное я попытался изменить егоРекурсивный реверсивный массив 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; 
} 
+1

если (arr.length = 1) НЕПРАВИЛЬНО и если (arr.length = 0) неправильно, Вы назначаете – epascarello

+0

Удаляется мой ответ, потому что я понял, что вы должны были использовать рекурсию. – Andy

+1

Даже если ваша функция работала, ваша функция возвращает массив, поэтому после одной итерации вы будете иметь это '[end0, [....]]'. После двух итераций вы будете иметь это '[end0, [end1, [...]]]', и он будет продолжать вложенные массивы дальше и дальше. Ваш подход не будет работать. Вам нужен новый дизайн. Возможно, вы хотите использовать '.concat()', чтобы добавить два массива вместе, а не встраивать один в другой. Если вам нужна помощь в новом дизайне, вам нужно будет лучше описать правила назначения, так как 'arr.reverse()' уже существует для этого. – jfriend00

ответ

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

Глядя на ваш код:

if(arr.length = 1) 

должно быть

if(arr.length == 1) 

же с нулевого чеком


И вы не вызывающего поп

var head = arr.pop; 

вам нужна скобки

var head = arr.pop(); 
0

Вот работоспособный примером с рабочим функция. FYI также есть функция built-in, которая сделает это за вас.

Я думаю, что, помимо путаницы с операторами присваивания/сравнения, когда вы строили массив результатов, вы должны использовать Array.concat(), чтобы объединить ваш массив, вместо этого вы строили новый массив, где вторым элементом был сам массив.

var a = [1,2,3,4,5]; 
 
alert(ReverseArray(a)); 
 

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

0

Это наиболее точный и чистый способ сделать это в одной строке с тройным оператором.

function reverse(arr) { 
    return arr.length < 2 ? arr : [arr.pop()].concat(reverse(arr)); 
} 
console.log(reverse([4, 3, 3, 1])); 
Смежные вопросы