Задать вопрос

Как избавиться от большого количества else if?

Здравствуйте, практикую JS, создал небольшую игру где пользователь должен угадать число, но меня смущает наличие большого количества else if, является ли этот подход правильным? Если нет, то как можно переделать код?

import { declOfNum } from "./declofnum.js";

const userInput = document.querySelector('input');
const button = document.querySelector('button');
const number = Math.floor(Math.random() * 10);
const triesTitle = document.querySelector('h2');
const triesSpan = triesTitle.querySelector('span');
let tries = 10;

export function getUserInput() {

    if (userInput.value === '' || userInput.value.length === 0) alert('Ошибка');

    if (tries === 0) return alert('У вас закончились попытки');

    else if (userInput.value == number) return alert('Поздравляю, вы угадали');

    else if (userInput.value > number) {
        alert('Вы ввели слишком большое число');
        tries--;
        triesSpan.textContent = declOfNum(tries, ['попытка', 'попытки', 'попыток']);
        triesTitle.textContent = `У вас осталось ${tries} ${triesSpan.textContent}`;
    }

    else if (userInput.value < number && userInput.value != '' && userInput.value.length != 0) {
        alert('Вы ввели слишком маленькое число');
        tries--;
        triesSpan.textContent = declOfNum(tries, ['попытка', 'попытки', 'попыток']);
        triesTitle.textContent = `У вас осталось ${tries} ${triesSpan.textContent}`;
    }
}   

button.addEventListener('click', getUserInput)
  • Вопрос задан
  • 287 просмотров
Подписаться 3 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 1
Adamos
@Adamos
let variants = [
  { condition: (tries === 0), alert: 'У вас закончились попытки' },
  { condition: (value == number), alert: 'Поздравляю, вы угадали', returnValue: true },
  { decreaseTries: true }
];
for(let i = 0; i < variants.length; ++i) {
  let v = variants[i];
  if(typeof v.condition === 'undefined' || v.condition) {
    if(v.alert) {
      alert(v.alert);
    }
    if(v.decreaseTries) {
      tries--;
      triesSpan.textContent = declOfNum(tries, ['попытка', 'попытки', 'попыток']);
      triesTitle.textContent = `У вас осталось ${tries} ${triesSpan.textContent}`;
    }
    return v.returnValue || false;
  }
}

Все варианты перечислять не стал, нужные добавляются по аналогии.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы