2016-01-14 1 views
0

я вроде чувствую, как идиот спрашиваю это, но обучение яваскрипт и делает легкие проблемы на coderbyte и хотел изменить строку так Worte этотпоп() Javascript не дает полной мощности

var randomString = "THIS IS THE STRING I AM TRYING TO REVERSE";  

    var newFunc = function() { 
    var randomArray = randomString.split(" "); 
    var newArray = []; 

    for (var i = 0; i <= randomArray.length; i++) { 

     newArray[i] = randomArray.pop(); 
     var diffString = newArray.join(" "); 
    } 
    console.log(diffString); 
    }; 

    newFunc();` 

Но выход Я получаю только

«ВОЗВРАЩАЕТСЯ ПОВРЕЖДЕНИЕ AM I».

Почему не печатает остальную часть строки? Сейчас я работаю над тем, чтобы изменить его другим способом, но это было самым простым и просто смущенным, почему это не сработало. Заранее спасибо.

+1

вопрос прост, вы уменьшаете размер исходного массива всякий раз, когда вы вызываете 'pop()' – mido

+0

, извлекаете длину массива перед рукой, также берете 'diffString' снаружи для цикла ... (P. S: решение в строке может использовать split-> reverse -> join), но я не хочу давать вам ответ, подумайте об этом ... – mido

+1

LIke mido сказал, что поп сделал это. Решение может быть таким же простым: randomString.split ('') .reverse(). Join (''); – Will

ответ

1

Когда вы выпадаете значения с randomArray, он меняет длину массива. Поскольку ваш цикл for проверяет его на каждой итерации, он преждевременно выходит из цикла, потому что длина становится короче.

Исправление состоит в том, чтобы сохранить длину до того, как вы начнете выскакивать, и использовать ее в цикле for.

(Это предполагает, что вы пытаетесь изменить порядок слов в строке.)

var randomString = "THIS IS THE STRING I AM TRYING TO REVERSE";  

var newFunc = function() { 
    var randomArray = randomString.split(" "); 
    var newArray = []; 
    var length = randomArray.length; 
    for (var i = 0; i <= length; i++) { 
    newArray[i] = randomArray.pop(); 
    } 
    var diffString = newArray.join(" "); 
    console.log(diffString); 
}; 

newFunc(); 
+0

Спасибо, это было полезно, и эта 'var length = randomArray.length;' была просто классной и не знала, что вы можете это сделать. Я все еще просматриваю ответы, предоставленные всем, и изучая больше. Я действительно прошел через петлю на бумаге, и именно тогда я понял, что длина становится короче. – user47301

0

Как упоминалось ранее вы изменяете длину во время цикла. Может быть, Array.sort будет проще использовать здесь? Или ... хорошо Array.reverse() как упоминалось ShadowRanger.

var randomString = "test sds2 iujn3 iujn4 jijb5 reverse"; 
 

 
function reverse(x) { 
 
    return x // This is a <string> 
 
    .split(" ") // Transform <string> into <Array> 
 
    .reverse() // Reverse array order 
 
    .join(" "); // Transform <Array> back into <string> 
 
} 
 
console.log(reverse(randomString));

1

Как уже отмечалось, контроль длины изменяющуюся массива является проблемой; кэш несколько раз вперед, так что вы поп нужное число раз, просто изменить цикл для (также фиксируя от <= исправить <):

for (var i = 0, len = randomArray.length; i < len; i++) { 

Конечно, глупая часть здесь является то, что вы ручная реализация. Уже есть Array.reverse:

var newFunc = function() { 
    console.log(randomString.split(" ").reverse().join(" ")); 
}; 

Выполнено. Однослойный. И это не так, как функция нестандартная, IE поддерживает ее с 5,5 и каждый другой браузер с момента выпуска 1.0.

Смежные вопросы