por qué javascript está mostrando un comportamiento extraño?

Yo había probado este fragmento de código en java que funciona correctamente bien, pero mientras que el cambio en javascript no está funcionando correctamente.

function checkNumberIfContainsKey(number, key){
    while(number > 0){
        if(number%10 == key){
            return true;
        }
        number /= 10;        
    }
    return false;
}

console.log(checkNumberIfContainsKey(19, 9));
console.log(checkNumberIfContainsKey(191, 9));
console.log(checkNumberIfContainsKey(912, 9));
console.log(checkNumberIfContainsKey(854, 9));

esta función debe devolver true si contiene la llave en cualquier posición. ejemplo: checkNumberIfContainsKey(19, 9) salida: true

my expected output:
checkNumberIfContainsKey(19, 9)   //true
checkNumberIfContainsKey(191, 9)  //true
checkNumberIfContainsKey(912, 9)  //true
checkNumberIfContainsKey(185, 9)  //false
my output:
checkNumberIfContainsKey(19, 9)   //true
checkNumberIfContainsKey(191, 9)  //false
checkNumberIfContainsKey(912, 9)  //false
checkNumberIfContainsKey(185, 9)  //false

2 Respuestas

  • CertainPerformance
    4 de mayo de 2019

    number /= 10 dentro de while(number > 0) se ejecuta muchas veces, hasta que la precisión de falla. (por ejemplo, para 191: 191, a continuación, 19.1, a continuación, 1.91, entonces 0.191, ...), Probablemente es mejor dividir el número en una matriz de dígitos individuales, a continuación, compruebe si el dígito que está buscando está incluido en la matriz:

    function checkNumberIfContainsKey(number, key){
        return String(number).split('').includes(String(key))
    }
    
    console.log(
      checkNumberIfContainsKey(19, 9),   //true
      checkNumberIfContainsKey(191, 9),  //true
      checkNumberIfContainsKey(912, 9),  //true
      checkNumberIfContainsKey(185, 9)  //false
    );

  • Shridhar Sharma
    4 de mayo de 2019

    El uso de esta

    function checkNumberIfContainsKey(number, key){
      var a = !!number.toString().match(key)
      console.log(a)
      return a;
    }
    
    checkNumberIfContainsKey(19, 9)   //true
    checkNumberIfContainsKey(191, 9)  //true
    checkNumberIfContainsKey(912, 9)  //true
    checkNumberIfContainsKey(185, 9)  //false