Estoy un poco confundido o tal vez solo por falta de conocimiento. Recién dando mis primeros pasos. Mi pregunta es: necesito probar cuándo un par de números (como 100, digamos 5) se comparará correctamente como números e incorrectamente como cadenas. Cómo arreglarlo correctamente. No puedo encontrar la mejor manera de probar esta última opción. La primera prueba es ambos números iguales La segunda prueba es el primer número más grande La tercera prueba es el segundo número más grande
Pensé que tal vez debería decir Fiel a la primera prueba. Y diga Falso cuando los números sean cadenas. ??
<script type="text/JavaScript"> alert(largest(false,false)); alert(largest(true,false)); alert(largest(false,true)); alert(); </script> function largest (firstNum, secondNum) { let largestNumber = largest; firstNum = parseInt(prompt('Enter the first number: ')); secondNum = parseInt(prompt('Enter the second number: ')); if (firstNum == secondNum) { //3 return false; /// maybe True?.. see my question } else { if (firstNum > secondNum) { //1 return largest = firstNum; } else if (firstNum < secondNum) { //2 return largest = secondNum; } if (isNaN(firstNum, secondNum)) { /// false if strings? return false; } } return largestNumber; } }Su función está haciendo tantas cosas como puedo ver. Está devolviendo verdadero/falso, el número más grande, etc.
¡Te sugiero que limpies un poco tu código de esta manera!
function largest() { const firstNum = parseInt(prompt('Enter the first number: ')); const secondNum = parseInt(prompt('Enter the second number: ')); if (isNaN(firstNum) || isNaN(secondNum)) { alert('Invalid input!'); return null; // return largest(); // This could work too } if (firstNum > secondNum) { return firstNum; } return secondNum; } Primero, le pedimos al usuario que ingrese ambos números. Luego, verificamos si los valores son válidos, isNaN nos ayuda con eso, y si hay algo incorrecto, mostramos, alertamos y regresamos.
Si los números son válidos, comprobamos
Si firstNumber es mayor que secondNumber, el mayor debe ser firstNumber
De lo contrario, devolvemos secondNumber (Último caso)
Su pregunta no está bien formulada, por lo que no estaba completamente seguro, pero supuse que quería decir que la comparación solo debería devolver true si se basaba en una comparación numérica (es decir, cualquier entrada de cadena debería devolver false
Si esa era tu pregunta, podrías intentarlo así:
const arr = [[100,5],["100",5],[100,"5"],["100", "5"]] // return true if first value is bigger function compare(v1, v2) { if (typeof(v1)==="string" || typeof(v2)==="string") return false; else return (v1 > v2); } // return array [boolean, boolean] for each of the input values function acompare(v1, v2) { if (typeof(v1)==="string" || typeof(v2)==="string") return [false, false, false]; else return [(v1 > v2), (v1 < v2), (v1===v2)]; } for (let a of arr) { console.log(compare(a[0],a[1]), acompare(a[0],a[1])) } //returns //true, [true, false] //false, [false, false] //false, [false, false] //false, [false, false]ver: https://jsfiddle.net/d2sv7xcb/5/
De esta manera, siempre que cualquiera de los argumentos sea una cadena, devuelve falso, si no, ¿devuelve el valor de la comparación?
@Editar: siguiendo su comentario, he agregado === al valor de retorno de la función, ¿de esa manera obtiene una matriz para la comparación?
[false, false, false] = no valid comparison [true, false, false] = value 1 > value 2 [false, true, false] = value 1 < value 2 [false, false, true] = value 1 === value 2