cuando activé la condición if, ¿por qué también se imprimirá el else? alguien podría indicar cuál es el problema del código de abajo? escrito en JS.

const rainbow = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet']; let colour = prompt("What is your favourite colour?").toLowerCase(); for (let i = 0; i < rainbow.length; i+=1) { if (rainbow[i] === colour) { console.log("yes") } else { console.log(rainbow.join(" *** ")); } }Es porque su ciclo se está ejecutando a través de la matriz. Entonces, por ejemplo, si digo rojo, irá al primer si y luego, después de la segunda iteración, irá al otro. Si este código no es una función, debe devolverlo en su si desea que el ciclo se detenga en este momento.
const findColor = () => { const rainbow = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet']; let colour = prompt("What is your favourite colour?").toLowerCase(); for (let i = 0; i < rainbow.length; i+=1) { if (rainbow[i] === colour) { console.log("yes") return rainbow[i]// It will leave the loop when it passes on the right color } else { console.log(rainbow.join(" *** ")); return } } }También puede usar la función include si no desea usar un bucle:
console.log(rainbow.includes(colour) ? 'yes' : rainbow.join(" *** "));Ni siquiera necesita un ciclo para esto. Puede usar la función de inclusión para matrices para lograr esto.
const rainbow = ['red','orange','yellow','green','cyan','blue','violet']; let colour = prompt("What is your favourite colour?").toLowerCase(); console.log(rainbow.includes(colour) ? 'yes' : rainbow.join(" *** "));Puede usar el método include para verificar la entrada.
const rainbow = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet']; let colour = prompt("What is your favourite colour?").toLowerCase(); if (rainbow.includes(colour)) { console.log("yes") } else { console.log(rainbow.join(" *** ")); }