Tengo una matriz de palabras y quiero verificar el texto ingresado para que, si uno de los elementos de la matriz está en este texto, me muestre ese elemento.
y en esta función quiero comprobarlo:
exports.words = (text)=>{ const words = [ 'word1' , 'word2' , 'word3' , 'word4' ]; for (let i = 0; i < words.length; i++) { const el = words[i]; if(el.includes(text)){ return el; }else{ return 'no words' } } }el problema es que esta función solo devuelve el primer elemento (palabra 1) Y si ingreso la palabra 2 o la palabra 3 en el texto, devuelve 'sin palabras', aunque esté en la matriz
Entonces, ¿cómo puedo solucionar este problema?
El problema está en el bloque else dentro del ciclo, la función regresa después de ejecutar la primera iteración.
No debe devolver no words fuera del bucle for , lo que garantizará la ejecución completa del bucle si no se encuentra ninguna coincidencia:
var words = (text)=>{ const words = ['word1','word2','word3','word4']; for (let i = 0; i < words.length; i++) { const el = words[i]; if(el.includes(text)){ return el; } } return 'no words'; //return here } console.log(words('word2')); //word2 console.log(words('other')); //no wordsel problema está dentro de tu ciclo for. Está devolviendo 'sin palabras' después de que solo se verificó el primer elemento de una matriz, ni siquiera está llegando al segundo elemento.
return words.some(word => word === text) ? text : 'no words'debería hacer el trabajo :)