How can I use ranges in a switch case statement using JavaScript?
How can I use ranges in a switch case statement using JavaScript? So, instead of writing code for each and every single possibility, I’d like to group them in ranges, For example:
7 Answers 7
You have at least four options:
1. List each case
As shown by LightStyle, you can list each case explicitly:
2. Use if / else if / else
If the ranges are large, that gets unwieldy, so you’d want to do ranges. Note that with if. else if. else if , you don’t get to the later ones if an earlier one matches, so you only have to specify the upper bound each time. I’ll include the lower bound in /*. */ for clarity, but normally you would leave it off to avoid introducing a maintenance issue (if you include both boundaries, it’s easy to change one and forget to change the other):
3. Use case with expressions:
JavaScript is unusual in that you can use expressions in the case statement, so we can write the if. else if. else if sequence above as a switch statement:
I’m not advocating that, but it is an option in JavaScript, and there are times it’s useful. The case statements are checked in order against the value you give in the switch . (And again, lower bounds could be omitted in many cases because they would have matched earlier.) Even though the case s are processed in source-code order, the default can appear anywhere (not just at the end) and is only processed if either no case s matched or a case matched and fell through to the default (didn’t have a break ; it’s rare you want to do that, but it happens).
4. Use a dispatch map
If your functions all take the same arguments (and that could be no arguments, or just the same ones), another approach is a dispatch map:
In some setup code:
Then instead of the switch:
That works by looking up the function to call on the dispatcher map, defaulting to doStuffWithAllOthers if there’s no entry for that specific myInterval value using the curiously-powerful || operator, and then calling it.
You can break that into two lines to make it a bit clearer:
I’ve used an object for maximum flexibility. You could define dispatcher like this with your specific example:
. but if the values aren’t contiguous numbers, it’s much clearer to use an object instead.
Как я могу использовать диапазоны в операторе switch switch, используя JavaScript?
Как использовать диапазоны в операторе case с помощью JavaScript? Поэтому, вместо написания кода для каждой возможности, я хотел бы сгруппировать их в диапазонах, например:
6 ответов
У вас есть как минимум четыре варианта:
1. Перечислите каждый case
Как показанный LightStyle, вы можете явно указать каждый случай:
2. Используйте if / else if / else
Если диапазоны большие, это становится громоздким, поэтому вы хотите делать диапазоны. Обратите внимание, что при if. else if. else if вы не дойдете до более поздних, если предыдущий соответствует, поэтому вам нужно только каждый раз указывать верхнюю границу. Я буду включать нижнюю границу в /*. */ для ясности, но обычно вы можете оставить ее, чтобы избежать введения проблемы обслуживания (если вы включаете обе границы, легко изменить ее и забыть изменить другую):
3. Используйте case с выражениями:
JavaScript необычен тем, что вы можете использовать выражения в выражении case , поэтому мы можем написать последовательность if. else if. else if выше как оператор switch :
Я не сторонник этого, но это вариант в JavaScript, и есть время, когда это полезно. Операторы case проверяются в порядке на значение, указанное в switch . (И снова, нижние границы могут быть опущены во многих случаях, потому что они бы соответствовали ранее.) Несмотря на то, что case обрабатываются в порядке исходного кода, default может отображаться в любом месте (а не только в конце) и обрабатывается только в том случае, если либо не соответствует case , либо case соответствует и падает до значения по умолчанию (не было break ; редко вы хотите это сделать, но это происходит).
4. Используйте карту отправки
Если ваши функции все принимают одни и те же аргументы (и это могут быть не аргументы или одни и те же), другой подход — это карта отправки:
В некотором установочном коде:
Затем вместо переключателя:
Это работает, просматривая функцию для вызова карты dispatcher , по умолчанию doStuffWithAllOthers , если нет записи для этого конкретного значения myInterval , используя любопытно-мощный || оператор, а затем вызывающий его.
Вы можете разбить это на две строки, чтобы сделать его более понятным:
Я использовал объект для максимальной гибкости. Вы можете определить dispatcher следующим образом:
. но если значения не являются смежными числами, гораздо проще использовать объект.