Как мне разрешить switch использовать верхний или нижний регистр?

#javascript #visual-studio #switch-statement

#javascript #visual-studio #switch-оператор

Вопрос:

Я работаю над изучением JS и в настоящее время пытаюсь создать коммутатор, который допускает прописные или строчные буквы. Плоды в моих случаях — это то, что я пытаюсь разрешить вводить. Например, если введено «Pineapple» или «pineapple», оно принимает оба. Сейчас он принимает только нижний регистр, и я не уверен, почему.

Вот мой код:

 function favDrinks() {
var text;
var drinks = document.getElementById("inputbox").value;

//Switch(expression) to select code blocks to be executed.
switch (drinks) {
    //Cases to be tested against the expression.
    case "Pineapple", "pineapple":
        text = "Pineapple Rum Punch";
        break;
    case "Apple", "apple":
        text = "Apple Whiskey Sour";
        //If case matches, code will execute, and break will end switch block.
        break;
    case "Lime", "lime":
        text = "Tequila Lime Mojito Cocktail";
        break;
    case "Cherry", "cherry":
        text = "Cherry Lemonde Cocktail";
        break;
    case "Orange", "orange":
        text = "Orange Crush";
        break;
    case "Cranberry", "cranberry":
        toext = "Cranberry Cosmopolitan";
        break;
    case "Banana", "banana":
        text = "Dirty Banana Cocktail";
        break;
    case "Watermelon", "watermelon":
        text = "Watermelon Sangria";
        break;
    //If none of the cases match, default text is ran
    default: 
    text = "There are no drinks with that selection."
}
document.getElementById("favdrinkresult").innerHTML = text;
 

}

Комментарии:

1. вы могли бы сделать это вместо : var drinks = (document.getElementById("inputbox").value).toLowerCase();

2. Это намного лучше и избавляет меня от необходимости добавлять больше кода и просто добавлять простую строку в конец «document.getElementById» ‘Спасибо!

Ответ №1:

Я только что нашел решение, и теперь оно работает в обоих направлениях.

Я просто добавил еще один регистр прямо под каждым регистром. Например:

 switch (drinks) {
    //Cases to be tested against the expression.
    case "Pineapple":
    case "pineapple":
        text = "Pineapple Rum Punch";
        break;
 

Ответ №2:

Хотя вы могли бы вызвать toLowerCase выражение, переданное в switch первый:

 switch (drinks.toLowerCase()) {
    //Cases to be tested against the expression.
    case "pineapple":
        text = "Pineapple Rum Punch";
        break;
 

Вам следует настоятельно рассмотреть возможность использования объекта вместо этого, он будет намного более кратким, менее подверженным ошибкам и более простым для чтения и записи:

 const drinkNames = {
  pineapple: "Pineapple Rum Punch",
  apple: "Apple Whiskey Sour",
  // ...
};
const input = document.getElementById("inputbox");
const result = document.getElementById("favdrinkresult");
function favDrinks() {
  const inputValue = input.value;
  const text = drinkNames[inputValue.toLowerCase()];
  result.textContent = text || "There are no drinks with that selection.";
}
 

(также не забывайте использовать .textContent при настройке только для текста — использовать innerHTML , в частности, при настройке или извлечении HTML-разметки; .textContent в противном случае это быстрее, безопаснее и более семантически уместно)

Комментарии:

1. Не могли бы вы объяснить мне, почему вместо этого использовать объект?

2. Как говорится в ответе, он будет намного более кратким, менее подверженным ошибкам и более простым для чтения и записи : . Если вы хотите написать элегантный, СУХОЙ код (который вы должны), switch это практически никогда не бывает правильным выбором.

3. Я понимаю, что вы говорите. На самом деле я сейчас студент веб-разработки, и это то, над чем мы работаем. Просто пытаюсь узнать как можно больше и почему все работает так, как работает. Спасибо.