Hola gente de StackOverflow,

Lo que esperaba:
Eliminando los números de la cadena "23Ka5X". El bucle cuenta la longitud y la instrucción if extrae las letras en una matriz letterMemory. Cuando no hay letras en la cadena, aparece el mensaje "¡oh, no hay números!" debería ser la salida.
Lo que me encontré:
He estado trabajando en esto por algún tiempo, pero no puedo encontrar mi error. No sé si me perdí un simple detalle o si hice un gran desastre. Mi sentimiento y salida de consola:

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

Siento que el problema está tratando de insertar cualquier letra en la matriz letterMemory a través de letterMemory.push(mixedMsg.charAt[loopString]) No funciona como lo imagino.

¡Estaría muy agradecida por tu ayuda!

Encontré una solución simple a través de .replace () pero realmente quiero que funcione con un bucle y declaraciones if ya que los bucles combinados con las declaraciones if fueron mis últimas lecciones de freecodecamp y quiero mejorar en eso.

0
Gerdo 8 sep. 2018 a las 23:22

5 respuestas

El código fijo

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!'
    }
}

El problema fue

  1. El bucle for no se estaba ejecutando desde que lo terminó con; al final.
  2. charAt es una función, por lo que puede hacer string.charAt (index), o también puede simplemente decir string [index].
  3. Está utilizando la instrucción return dentro del ciclo for, por lo que lo que sucederá es que incluso si el ciclo for se ejecutara (sin el punto y coma al final), se ejecutaría solo una vez.
  4. Otro problema es que la variable letterMemory se declara fuera de la función, por lo que si llama a esta función dos veces, usaría la misma matriz letterMemory.

-final de respuesta-

Lectura adicional: puede usar split , filter y operador ternario para condensar la función de la siguiente manera ...

function orderMsg(mixedMsg){
    const letterMemory = mixedMsg.split('').filter(isNaN)
    return letterMemory.length ? letterMemory : 'oh no numbers!'
}
1
rmn 8 sep. 2018 a las 20:56
  1. Has terminado for ciclo en la misma línea con ;.
  2. charAt() es un método.
  3. Valor de retorno después de que finalice el ciclo 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
Atal Prateek 8 sep. 2018 a las 20:48

Tal vez intente usar .test para hacer coincidir las letras.

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
}

Para una explicación más completa: https://developer.mozilla.org/ es-ES / docs / Web / JavaScript / Reference / Global_Objects / RegExp / test

0
I0_ol 8 sep. 2018 a las 20:54

Use replace con regex globalmente, reemplazando todos los dígitos por una cadena vacía:

string.replace(/[0-9]/g, "")
0
Nick 8 sep. 2018 a las 20:45

Esto podría ser útil

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
benjamin c 8 sep. 2018 a las 20:42