Estaría encantado si alguien pudiera mirar mi código. He estado tratando de devolver el número total de vocales en una cadena dada. Quiero que mi código tenga en cuenta los casos de la letra , los espacios vacíos en la cadena y también la ausencia de vocal . Creo que hay algo mal con mi declaración if que devuelve 0 para la cadena de entrada "Crypt" y "Crypto"
function countVowels(str) { let count = 0; let arr = str.toLowerCase().split("") let vowels = ["a","e","i","o","u"] console.log(arr) for (let i = 0; i < str.length; i++){ if (arr[i].includes(vowels)){ count++ } else { return 0 } } return count } console.log(countVowels("Crypto")) console.log(countVowels("Crypt"))Hay varios problemas con el código que ha producido aquí.
La primera es que, para cada letra de la cadena, está comprobando si la letra incluye la matriz de vocales, lo que nunca será cierto. Efectivamente has escrito esto...
"a".includes(["a", "e", "i", "o", "u"])que es al revés.
En su lugar, debe preguntarle a la matriz si incluye la letra dada, de esta manera:
["a", "e", "i", "o", "u"].includes("a") // true ["a", "e", "i", "o", "u"].includes("s") // false El segundo problema es que, en tu rama else , return 0 . Esto detendrá inmediatamente su función y devolverá 0 la primera vez que encuentre una no vocal. En lugar de return 0 , puede simplemente no realizar ninguna acción y descartar la rama else por completo.
En última instancia, su ciclo debería verse así:
for (let i = 0; i < str.length; i++){ if (vowels.includes(arr[i])) { count++ } }En su bucle for , la expresión:
arr[i].includes(vowels) // It should be... vowels.includes(arr[i]) .includes() es un método String y Array, por lo que puede ser confuso para un novato. En general, desea prefijar el método con una matriz o cadena que sirve como filtro (la cadena/matriz utilizada para comparar con el valor de entrada).
Además, la declaración else acortará su función porque return finaliza toda la función de inmediato. La instrucción if es suficiente, si no hay una coincidencia, el bucle for simplemente la ignorará.
function countVowels(str) { let count = 0; let arr = str.toLowerCase().split(""); let vowels = ["a", "e", "i", "o", "u"]; for (let i = 0; i < str.length; i++) { if (vowels.includes(arr[i])) { count++ } } return count; } console.log(countVowels("Crypto")) console.log(countVowels("Crypt")) Como una alternativa más eficiente, use .filter() como tal y devuelva V.length :
const V = array.filter(char => vowels.includes(char)); function countVowels(str) { let array = str.toLowerCase().split(""); const vowels = ["a", "e", "i", "o", "u"]; const V = array.filter(char => vowels.includes(char)); return V.length; }; console.log(countVowels("Crypto")) console.log(countVowels("Crypt"))Hay muchas soluciones para esto.
Creo que recién estás comenzando, así que espero que lo siguiente te ayude.
function countVowels(str) { let count = 0; let arr = str.toLowerCase().split(""); for (let i = 0; i < str.length; i++){ if (arr[i] === "a" || arr[i] === "e" || arr[i] === "i" || arr[i] === "o" || arr[i] === "u")){ //same as count++ but good practice count+=1 } else { return 0 } } return count } console.log(countVowels("Crypto")) console.log(countVowels("Crypt"))