Хорошо, я понимаю вашу мысль. Вы намеревались реализовать это, и вы удивляетесь, почему ваш код не работает должным образом. Слава за ваш смелый подход. Давайте исправим возникшие у вас проблемы шаг за шагом:
Исходный код
function rev(n){
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
Определите обратное за пределами l oop
function rev(n){
var reversed = "";
for(i=n.length;i=0;i--){
var reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
Объяснение: Ваш код воссоздайте его внутри вашего l oop на каждом шаге, и, предполагая, что он не был определен каким-либо образом вне функции, он получит sh при первом использовании. Вам необходимо правильно инициализировать его перед тем, как что-либо объединить с ним.
Исправить конкатенацию
function rev(n){
var reversed = "";
for(i=n.length;i=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
Объяснение: Удалено ключевое слово var
внутри l oop, поэтому вы снова используете reversed
и правильно объединить n[i]
с ним.
Правильно определить i
function rev(n){
var reversed = "";
for(let i = n.length - 1;i=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
Объяснение: Необходимо убедиться, что i
существует как переменная. Кроме того, мы инициализируем его с n.length - 1
, поскольку индексирование начинается с 0, поэтому первый элемент имеет индекс 0, второй элемент имеет индекс 1 и ..., а k-й элемент имеет индекс k- 1, следовательно, последний элемент n
равен n.length - 1
, и, как вы правильно выяснили, последний элемент должен быть первым элементом.
Исправьте условие продолжения
function rev(n){
var reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
return reversed;
}
console.log(rev("test"));
Объяснение: Вы предполагали, что второй оператор внутри for является конечным условием, но это полная противоположность: это условие продолжения. Он переводится в простые слова как «повторять до тех пор», а не «повторять до».
Делать это с защитой
function rev(n){
var reversed;
if (typeof n === "string") {
reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
}
return reversed;
}
console.log(rev("test"));
Объяснение: Мы делаем реверсию, только если это строка.
Давайте поддержим массив:
function rev(n){
var reversed;
if (typeof n === "string") {
reversed = "";
for(let i = n.length - 1;i>=0;i--){
reversed = reversed + n[i];
}
} else if (Array.isArray(n)) {
reversed = [];
for(let i = n.length - 1;i>=0;i--){
reversed.push(n[i]);
}
}
return reversed;
}
console.log(rev("test"));
console.log(rev(["t","e","s","t"]));
Объяснение: Алгоритм аналогичен для массивов и для строк, но, тем не менее, мы справляемся с техническими различиями.