Potrzebuję wielu przypadków w instrukcji switch w JavaScript, coś w stylu:
switch (varName)
{
case "afshin", "saeed", "larry":
alert('Hey');
break;
default:
alert('Default case');
break;
}
Jak mogę to zrobić? Jeśli nie ma sposobu, aby zrobić coś takiego w JavaScript, chcę poznać alternatywne rozwiązanie, które również opiera się na koncepcji DRY .
javascript
switch-statement
Afshin Mehrabani
źródło
źródło
Odpowiedzi:
Skorzystaj z funkcji zastępczej
switch
instrukcji. Dopasowana sprawa będzie działać do momentu znalezieniabreak
(lub końcaswitch
instrukcji), dzięki czemu można ją zapisać w następujący sposób:źródło
switch('10') { case 1, '10': console.log('ok') }
printok
switch(1)
. Etykieta tutaj to tylko przecinek.Działa to w zwykłym JavaScript
Twoje zdrowie.
źródło
Oto inne podejście,
switch
całkowicie unikające stwierdzenia:źródło
switch ... case
. Zbyt łatwo jest zapomnieć obreak
oświadczeniu, a jeśli użyjesz upadku celowo, te zapomnianebreak
oświadczenia mogą być bardzo trudne do wykrycia. Ta wersja metody wyszukiwania ma również wiele wspaniałych funkcji, którychswitch ... case
brakuje, takich jak dynamiczna rozszerzalność lub możliwość całkowitego zastąpienia obiektu w celu osiągnięcia przełączenia trybu. Łatwiej jest też utrzymać porządek i może prowadzić do łatwiejszego do utrzymania kodu. Zobacz ericleads.com/2012/12/switch-case-consanted-harmful//fallthrough
zamiast tego,break
gdy celowo pomijambreak
. Pomaga to zidentyfikować, kiedy jest to błąd, a kiedy celowo.W Javascript, aby przypisać wiele spraw do przełącznika, musimy zdefiniować
different case without break inbetween
jak podano poniżej:Zobacz przykład kliknij link
źródło
Jeśli używasz ES6, możesz to zrobić:
Lub we wcześniejszych wersjach JavaScript możesz to zrobić:
Pamiętaj, że to nie będzie działać w starszych przeglądarkach IE, ale możesz dość łatwo załatać sprawę. Zobacz pytanie, czy ciąg znaków znajduje się na liście w javascript, aby uzyskać więcej informacji.
źródło
includes
słowo? Wybierz swój.W węźle wydaje się, że możesz to zrobić:
To sprawia, że w niektórych przypadkach jest znacznie bardziej zwarty kod.
źródło
Dodając i wyjaśniając odpowiedź Stefano, możesz użyć wyrażeń, aby dynamicznie ustawić wartości warunków w przełączniku, np .:
Więc w swoim problemie możesz zrobić coś takiego:
chociaż nie jest tak SUCHO ...
źródło
varName
wyrażenie wyrażenia, spodziewaj się, że zmienna nazwa jest buforowana.możesz użyć operatora „ in ” ...
polega na wywołaniu obiektu / skrótu ...
tak szybko, jak javascript może być ...
Ciesz się, ZEE
źródło
Używam w ten sposób:
źródło
g
flagi, ponieważ używasz wyrażeń regularnych tylko raz i wyrzucasz je. W rzeczywistości, jeśli trzymasz je poza funkcją,g
flaga zaszkodzi ci, próbując dopasować z indeksu różnego od 0 na kolejnych.test(
s. Naprawiłem także literówkę, w której wielkość liter przełączania byłasensor
zmienna, a nietrue
stała, w celu dopasowania wyrażeń boolowskich. Zobacz edycję.case /officedocument/.test(type) && /presentation/.test(type): iconClass = "far fa-file-powerpoint red"; break;
To zależy. Switch ocenia raz i tylko raz. Podczas meczu wszystkie kolejne stwierdzenia sprawy aż do „przerwania” ognia, bez względu na to, co mówi sprawa.
źródło
Podoba mi się to ze względu na przejrzystość i składnię DRY.
źródło
Widzę, że jest tu wiele dobrych odpowiedzi, ale co się stanie, jeśli będziemy musieli sprawdzić więcej niż 10 przypadków? Oto moje własne podejście:
źródło
if (accessDenied.includes(varName)) return 'Access Denied!'; return 'Access Allowed.'
to więcej niż wystarczające.Problem z powyższymi podejściami polega na tym, że musisz powtarzać kilka
case
s za każdym razem, gdy wywołujesz funkcję, która maswitch
. Bardziej niezawodnym rozwiązaniem jest posiadanie mapy lub słownika .Oto przykład
źródło
Możesz to zrobić:
lub tylko jeden wiersz kodu:
mała poprawa w stosunku do odpowiedzi ErikE
źródło
Dla każdego, kto tu przyjeżdża z podobnym problemem, z którym miałem do czynienia po tygodniach kodowania i wypalenia zawodowego, moja sytuacja była podobna do:
Zawsze
default
wpisana sprawa. Jeśli napotykasz podobny problem z instrukcją przełączania wielu spraw, to czego szukasz:Mam nadzieję, że to komuś pomoże, odciągnąłem włosy, zanim przypomniałem sobie, aby używać skrzynki przełączników w taki sam sposób, jak używam jej w moich reduktorach redux.
źródło
Jednym z możliwych rozwiązań jest:
źródło
Dla mnie jest to najprostszy sposób:
źródło
Innym sposobem wykonywania wielu przypadków w instrukcji switch, gdy są one wewnątrz funkcji
źródło
Możesz to napisać w ten sposób:
źródło
źródło
switch
powinno działać oświadczenie. Po prostucase "1":
niecase (num = "1"):
.document.getElementById("result").innerHTML = ....
poza przełącznikiem i dodać wynik wartości dziennej na końcu?num
ale nadal działa, ponieważswitch
zostało już ocenione i przypisanie daje wartość. Jest to programowanie przez mutację / uczenie maszynowe w najlepszym wydaniu.wystarczy zmienić podejście do przełącznika
źródło
(expression)
w nawiasie, a zwracana wartość musi być danymi wejściowymi. Zobacz moją odpowiedźswitch(true) { case (var1 === 0 && var2 === true): {} }