Javascript - извлекать буквы из буквенно-цифровой строки с помощью цикла - PullRequest
0 голосов
/ 08 сентября 2018

Привет, люди StackOverflow,

Что я ожидал:
Удаление номера строки "23Ka5X". Цикл считает длину, а оператор if извлекает буквы в массив letterMemory. Когда в строке нет букв, появляется сообщение «о нет цифр!» должен быть вывод.
С чем я столкнулся:
Я работаю над этим уже некоторое время, но не могу найти свою ошибку. Я не знаю, пропустил ли я простую деталь или сделал большой беспорядок. Мои ощущения и консольный вывод:

var letterMemory = [];
    function orderMsg(mixedMsg) {
        for (var loopString = 0; loopString < mixedMsg.length; loopString++); {
          if (isNaN(parseInt(mixedMsg.charAt[loopString]))); {
           letterMemory.push(mixedMsg.charAt[loopString]);
           return letterMemory;  
        } if (!isNaN(parseInt(mixedMsg.charAt[loopString]))) {
           return "oh no numbers!";
        }
      }
    }
    console.log(orderMsg("23Ka5X"));

Мне кажется, что проблема заключается в попытке вставить любую букву в массив letterMemory через letterMemory.push(mixedMsg.charAt[loopString]) не работает, как я себе это представляю.

Буду очень признателен за вашу помощь!

Я нашел простое решение с помощью .replace (), но я действительно хочу, чтобы оно работало с помощью цикла и операторов if с циклами в сочетании с операторами if, которые были моими последними уроками freecodecamp, и я хочу добиться в этом большего.

Ответы [ 5 ]

0 голосов
/ 08 сентября 2018

Фиксированный код

function orderMsg(mixedMsg){
    var letterMemory = []
    for (var loopString = 0; loopString < mixedMsg.length; loopString++){
        if (isNaN(mixedMsg[loopString])){
            letterMemory.push(mixedMsg[loopString])
        }
    }

    if (letterMemory.length){
        return letterMemory
    } else {
        return 'oh no numbers!'
    }
}

Проблема была

  1. Цикл for не выполнялся, поскольку вы завершили его с помощью; в конце.
  2. charAt - это функция, поэтому вы можете либо использовать string.charAt (index), либо вы можете просто сказать string [index].
  3. Вы используете оператор return в цикле for, так что произойдет, даже если цикл for запустится (без точки с запятой в конце), он будет выполнен только один раз.
  4. Еще одна проблема заключается в том, что переменная letterMemory объявляется вне функции, поэтому это означает, что если вы вызовете эту функцию дважды, она будет использовать один и тот же массив letterMemory.

Конец ответа-

Дополнительное чтение: вы можете использовать split , filter и троичный оператор для сжатия функции следующим образом ..

function orderMsg(mixedMsg){
    const letterMemory = mixedMsg.split('').filter(isNaN)
    return letterMemory.length ? letterMemory : 'oh no numbers!'
}
0 голосов
/ 08 сентября 2018

Возможно, попробуйте использовать .test для сопоставления букв.

function orderMsg(str){
  var result = [];
  for(var letter of str){
    if(/[a-zA-Z]+/g.test(letter)){
      result.push(letter)
    }
  }
  if(result.length === 0){
    return 'Oh no numbers'
  }
  return result
}

Для более подробного объяснения: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

0 голосов
/ 08 сентября 2018

Это может быть полезно,

function orderMsg(mixedMsg) {
    for (var loopString = 0; loopString < mixedMsg.length; loopString++) {
        if (isNaN(parseInt(mixedMsg.charAt(loopString)))) {
            letterMemory.push(mixedMsg.charAt(loopString));
        }
    }
    return letterMemory;
}

var arr = orderMsg("23s5");
if (arr.length == 0) {
     console.log("oh no numbers!")
} else {
     console.log(arr);
}
0 голосов
/ 08 сентября 2018
  1. Вы завершили цикл for в одной строке с ;.
  2. charAt() - это метод.
  3. Возвращаемое значение после окончания цикла for.

    var letterMemory = [];
    function orderMsg(mixedMsg) {
        for (var loopString = 0; loopString < mixedMsg.length; loopString++) {
            var letter=parseInt(mixedMsg.charAt(loopString));
            if(isNaN(letter)){
                letterMemory.push(mixedMsg.charAt(loopString));
            }
        }
        if(letterMemory.length>0){
            return letterMemory;
        }
        else{
            return "Oh no numbers!";
        }
    }
    console.log(orderMsg("23Ka5X"));
    
0 голосов
/ 08 сентября 2018

Используйте глобально замену на регулярное выражение, заменяя все цифры пустой строкой:

string.replace(/[0-9]/g, "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...