JavaScript

Гляньте код пожалуйста? Он работает, но мне кажется так не пишут. Да и по default что то не хочет работать код.

Условия засуното в цикл. И я не нашёл способа, как написать нормально, типа:

if(){
}
else if(){
}
else{
}

_________________________
Код здесь:
codepen.io/vvv7220/pen/RwNyzrQ?editors=1011
_________________________

Неви-Димка .
Неви-Димка .
28 587
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 должен быть числовым. Тогда задача сводится к школьной арифметике с длинами массивов.
Cергей Cмолий
Cергей Cмолий
85 033
Лучший ответ
Cергей Cмолий Либо, рендерить опшнс со значениями вида "red12" - удобно при вероятности пополнения массивов (здесь не тот случай) при сохранении уникальности индексов.
Суть в том что такие значения легко и быстро парсятся регуляркой /(\D+)(\d+)/, что позволяет напрямую адресовать элемент типа match && (data[match[1]] || [])[match[2]]
Неви-Димка . Спасибо как всегда. Но если бы я знал, хотя бы половину из написаного тобой, вряд ли бы я тут задавал вопросы и писал такой говнокод, какой сейчас приходится писать. Но всё равно спасибо, кое что пытаюсь разобрать. Регулярные выражения для меня пока что магия, которую я вряд ли пойму в ближайшем будущем)))
не понятно ни чего.
кинь код на этот ресурс
https://pastebin.com/
потом ссылку сюда
Я больше по си++, так что буду расматривать как программу на си++. Создаем функцию поиска в массиве, и тогда логика написания программы упрощается.
Буду писать как на си++, потому что синтаксиса 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.
Рома Призрак
Рома Призрак
15 408