Tengo una matriz con 58112 palabras. Sin embargo, cuando trato de verificar si una palabra está en la lista, siempre devuelve falso, excepto la primera palabra. No voy a publicar mi código porque sería demasiado grande, pero aquí están algunas de las cosas principales:
isWord("a") //true isWord("hello") //false?? function isWord(word) { word = word.toLowerCase(); for (let i = 0; i < words.length; i++) { if (word == words[i]) { return true; } else { return false; } } } words[] es la lista de 58112 palabras. La primera palabra es "a", por supuesto. Cuando hago isWord("a") , devuelve verdadero, como se esperaba. Si hago algo que no sea "a", devuelve falso. ¿Por qué ocurre esto? ¿Es porque excedí el límite máximo de matriz? No me parece.
Las palabras que usé son de esto (tuve que agregar la "a" y la "i" porque no tenían) .
Me di cuenta de que lo hiciste
return false;Eso haría que nada después de la declaración de devolución no se ejecute (y como resultado, su código deja de ejecutarse después de una iteración). Recomendaría reemplazarlo con una declaración de impresión o almacenar el resultado en una variable booleana e imprimirlo en otro lugar, O tal vez devolver la variable booleana para que no tenga que cambiar mucho el otro código. Eso se puede hacer de esta manera:
isWord("a") //true isWord("hello") //false?? function isWord(word) { var boolean check = false; //setting it to false by default removes the need for the "else" statement word = word.toLowerCase(); for (let i = 0; i < words.length; i++) { if (word == words[i]) { check = true; } } return check; }Puedo estar equivocado, pero creo que esto se debe a que cuando verifica si la palabra está en la matriz de palabras o no.
En la primera iteración de la matriz, si encuentra que la palabra que ingresó es a valor de words[0] , devuelve true . De lo contrario, si devuelve false y sale de la función.
Básicamente, solo verifica si el elemento que ingresó es igual a a o no.
Aquí hay una forma más rápida y concisa de lograr la misma funcionalidad.
function isWord(word) { word = word.toLowerCase() var i = word.length; while (i--) { if (words[i] === word) { return true; } } return false; }