aquí está el código:
const str = "asdfcvb"; const result = str.split("").every((e) => { return e==='a'||'b'}); console.log(result);Espero que str.split ("") devuelva una matriz, y cada método verifica si cada elemento de la matriz es igual a 'a' o 'b', lo que debería devolver falso, pero devuelve verdadero
Porque e==='a'||'b' significa ((e==='a')||'b')
Cuando el caso e !== 'a' , devolverá 'b' que es verdadero en Javascript, por lo que every método obtuvo un valor verdadero de cada término y luego el resultado será verdadero.
Puedes usar el seguimiento para lograr lo que quieres
const result = str.split("").every((e) => { return (e==='a') || (e==='b') });No puede omitir el === de la segunda parte de su condición. En este momento, lo que estás diciendo es return e === 'a' o 'b' . Cuando e no es igual a 'a' devuelve 'b' . Que es veraz y cuando se convierte en booleano se convierte en verdadero. Ejecuta esto en el navegador:
'a' === 'b' || 'c'Si lo ejecuta, verá que devuelve 'c'. Lo mismo sucede en su devolución de llamada. Tienes que cambiar tu declaración de devolución a esto para que funcione:
return e === 'a' || e === 'b'Todo parece correcto. El problema está en la forma en que comparaste las cadenas.
deberías comparar aquellos como e === "a" || e === "b"
y el código de trabajo
const str = "asdfcvb"; const result = str.split("").every((e) => { return (e === "a" || e === "b")}); console.log(result);Explicación:
return e==='a'||'b'
ejecutar la prueba para el primer elemento que es "a" devolverá verdadero ya que ahora e es "a" aquí, que es igual a "a" .
ahora, si llega al segundo elemento que es "s" y obviamente no es igual a "a" entonces return e==='a'||'b' se convierte en return false||'b' y ahora, cuando evalúas esto, se devuelve el valor será "b"
y poner "b" como condición es similar a true porque no es undefined o null
esto se puede probar de la siguiente manera
if("b") return true; // returns true Por lo tanto, devuelve true para cada elemento y, por lo tanto, vuelve true al final.