El proyecto que estoy tratando de completar actualmente te da una matriz ( coffees ). El objetivo es determinar si el café necesita azúcar, crema o nada, en función de si es un tueste claro, medio u oscuro. Por ejemplo, light colombian roast debe salir I'll have the light colombian roast and drink it black . El código actual que tengo hace esto correctamente, excepto solo por la primera instancia de claro, medio, oscuro que se encuentra en los cafés de matriz. No estoy muy seguro de cómo escribir mi función para incluir todas las instancias de la palabra clave que se encuentra, en lugar de detener y almacenar solo el índice de la primera cadena en la que se encuentra la palabra.
const coffees = [ "light colombian roast", "hawaiian dark roast", "guatemalan blend medium roast", "dark madagascar blend", "jamaican dark blue", "jamaican medium roast", "salvador robusto light" ] let output = "" function searchStringInArray (str, strArray) { for (var j=0; j<strArray.length; j++) { if(strArray[j].match(str)) { return j; } } return -1; } for (const coffee of coffees) { if (coffee.includes("light")) { let i; i = searchStringInArray('light', coffees); output += `I'll have the ${coffees[i]} and drink it black` } else if (coffee.includes("medium")) { let k; k = searchStringInArray('medium', coffees); output += `I'll have the ${coffees[k]} and add cream only` } else if (coffee.includes("dark")) { let n; n = searchStringInArray('dark', coffees); output += `I'll have the ${coffees[n]} and add cream and sugar` } output += "\n" } console.log(output)En lugar de hacer que la lógica sea demasiado compleja, simplemente puede lograrlo mediante el uso de Array.map() junto con la declaración de cambio para un mejor rendimiento en comparación con múltiples cláusulas if/else.
Demostración de trabajo:
const coffees = [ "light colombian roast", "hawaiian dark roast", "guatemalan blend medium roast", "dark madagascar blend", "jamaican dark blue", "jamaican medium roast", "salvador robusto light" ]; const output = coffees.map(coffee => { switch(true) { case (/light/i.test(coffee)): str = `I'll have the ${coffee} and drink it black` break; case (/medium/i.test(coffee)): str = `I'll have the ${coffee} and add cream only` break; case (/dark/i.test(coffee)): str = `I'll have the ${coffee} and add cream and sugar` break; } return str; }); console.log(output);Creo que lo estás complicando demasiado a menos que me esté perdiendo un paso en lo que estás tratando de hacer. Ya repasó cada café, no es necesario volver a buscarlo.
for (const coffee of coffees) { if (coffee.includes("light")) { output += `I'll have the ${coffee} and drink it black` } else if (coffee.includes("medium")) { output += `I'll have the ${coffee} and add cream only` } else if (coffee.includes("dark")) { output += `I'll have the ${coffee} and add cream and sugar` } output += "\n" }