Estoy creando una aplicación de calculadora en JS y la hice funcionar usando el mouse para hacer clic en los botones de la pantalla, así que ahora estoy integrando el uso del teclado. Para resumir, en parte de mi funcionalidad antes de que se usara el teclado, estaba usando la propiedad de búsqueda en una matriz para encontrar el último operador en el que se hizo clic que NO era el = btn y funcionó perfectamente bien:
lastOperatorThatIsNotEqual = operatorArray.reverse().find(e => e !== "=")
Ahora que estoy usando el teclado, cuando hago clic en Intro, quiero que sea el equivalente a hacer clic en = btn, así que intenté hacerlo de esta manera usando una función externa y una instrucción if/else
function test(e) { if (e !== 'Enter') { return e } else if (e !== '=') { return e } else { console.log('wrong') } } lastOperatorThatIsNotEqual = operatorArray.reverse().find(test)
Sin embargo, lo anterior no funciona. Si elimino la parte else if para que sea solo e !== 'Enter'
o e !== '='
entonces funciona bien, pero no puedo tener ambos al mismo tiempo. Me imagino que probablemente sea más eficiente hacer que se verifique de esa manera en lugar de hacer dos funciones, pero no puedo entender por qué esto no funciona.
Cualquier sugerencia es muy apreciada. ¡Gracias!
Sus condiciones están en mal estado. Este
if (e !== 'Enter') { return e } else if (e !== '=') { return e }
invariablemente resultará en el cumplimiento de una de esas ramas. Si no se cumple la primera condición, entonces e es 'Enter'
, por lo que e !== '='
se cumple.
También debe devolver un valor booleano (o un valor que se sabe que es verdadero o falso) de una devolución de llamada .filter
; no devuelva el valor que se repite, porque si el valor es falso, no se incluirá en el resultado formación.
const lastOperatorThatIsNotEqual = operatorArray.reverse().find( e => e !== "=" && e !== 'Enter' )
o
function test(e) { if (e === 'Enter') { return false; } if (e === '=') { return false; } return true; } lastOperatorThatIsNotEqual = operatorArray.reverse().find(test)
Devuelve un boolean
desde find
. Prueba esto:
function test(e) { return e === 'Enter' || e === '=' }