Почему мои JS для l oop не работают? (возвращает «неопределенный» - PullRequest
0 голосов
/ 27 марта 2020

Я выполнял упражнение JS, и меня попросили вернуть комбинацию чисел в обратном порядке (1234 => 4321), поэтому я всегда пытался сделать это сам, не ища решения, и пришел с:

function rev(n){
    for(i=n.length;i=0;i--){
       var reversed = reversed + n[i];
    }
    return reversed;
}
console.log(rev("test"));

Но когда я запускаю это на VSCode, он возвращает мне неопределенное значение, и я не понимаю, какая часть моего кода неверна. Есть идеи?

Ответы [ 5 ]

1 голос
/ 27 марта 2020

вы могли бы сделать что-то вроде этого:

const reverseString = text => {
  let result = "";
  for (let i = text.length - 1; i > -1; i--) {
    result += text[i];
  }

  return result;
};

console.log(reverseString('test'));
1 голос
/ 27 марта 2020

Нужно ли использовать l oop?

Код ниже:

String(1234)  // make the number a string 
.split("")    // split on char making an array
.reverse()    // reverse that array
.join("")     // join it back

+ возвращает обратную строку к номеру

console.log(
 +String(1234).split("").reverse().join("")
)
1 голос
/ 27 марта 2020

Вы определяете обратное в for l oop. Что нужно сделать:

function rev(n) {
  let reversed = "";
  for (let i = n.length - 1; i >= 0; i--) {
    reversed = `${reversed}${n[i]}`;
  }
  return reversed;
}
console.log(rev("test"));
0 голосов
/ 27 марта 2020

Хорошо, я понимаю вашу мысль. Вы намеревались реализовать это, и вы удивляетесь, почему ваш код не работает должным образом. Слава за ваш смелый подход. Давайте исправим возникшие у вас проблемы шаг за шагом:

Исходный код

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"]));

Объяснение: Алгоритм аналогичен для массивов и для строк, но, тем не менее, мы справляемся с техническими различиями.

0 голосов
/ 27 марта 2020

Вы можете изменить существующий код, как показано ниже, и он будет работать нормально

function rev(str){
  var n = str.split("");
  var reversed ="";
    for(i=n.length-1; i >= 0 ; i--){
       reversed +=n[i];
    }
    return reversed;
}
console.log(rev("1234"));

Лучший способ зарезервировать строку

const reverseStr = str => {
  var splitString = str.split("");
  var reverseArray = splitString.reverse();
  var joinArray = reverseArray.join(""); 
  return joinArray;

};
...