Условия засуното в цикл. И я не нашёл способа, как написать нормально, типа:
if(){
}
else if(){
}
else{
}
_________________________
Код здесь:
codepen.io/vvv7220/pen/RwNyzrQ?editors=1011
_________________________

const res = ['', 'Красная ветка', 'Зелёная ветка', 'Голубая ветка'][
(a.red.includes(station.value) && 1) ||
(a.green.includes(station.value) && 2) ||
(a.blue.includes(station.value) && 3)
];
console.log(res);
if (res)
out.textContent = res;
Но подход (разметка, структура данных) вообще в корне неверен - логика должна базироваться на принципе сокращения возможных ошибок, а сейчас у тебя наоборот: даже опечатка в одной букве может все сломать...
На вычислении индекса надо делать, value должен быть числовым. Тогда задача сводится к школьной арифметике с длинами массивов.
Я больше по си++, так что буду расматривать как программу на си++. Создаем функцию поиска в массиве, и тогда логика написания программы упрощается.
Буду писать как на си++, потому что синтаксиса js не знаю и лень искать.
объявляем функцию:
bool compareString(string str, string arrayOfString[], int sizeOfArray)
{
for(int i = 0; i < sizeOfArray; ++i)
{
if(arrayOfString[i] == str) return true;
}
return false;
}
И тогда логика работы программы будет примерно так:
if(compareString(station.value, red, red.length))
{
// красная ветка
}
else if(compareString(station.value, green, green.length))
{
//зеленая ветка
}
else if(compareString(compareString(station.value, blue, blue.length))
{
//голубая ветка
}
else
{
//default
}
И да в вашем коде закралась ошибка, видимо из-за копирования циклов. Размер массива должен быть разным, а у вас каждый раз он равен red.length.
Суть в том что такие значения легко и быстро парсятся регуляркой /(\D+)(\d+)/, что позволяет напрямую адресовать элемент типа match && (data[match[1]] || [])[match[2]]