我可以使用两个variables的case / switch语句吗?

当谈到JavaScript时,我是一个新手,我的理解是使用一个SWITCH / CASE语句比一大堆IF语句快。

但是,我想使用两个variables的SWITCH / CASE语句。

我的networking应用程序有两个滑块,其中每个都有五个状态。 我想要的行为是基于这两个variables的状态。 显然这是很多IF / THEN陈述的一大堆。

我想过的一种方法是将两个variables连成一个,然后我可以切换/ CASE。

使用两个variables来实现SWITCH / CASE有没有更好的方法?

谢谢 !

一个按位运算符怎么样? 而不是string,你正在处理“枚举”,看起来更“优雅”。

 // Declare slider's state "enum" var SliderOne = { A: 1, B: 2, C: 4, D: 8, E: 16 }; var SliderTwo = { A: 32, B: 64, C: 128, D: 256, E: 512 }; // Set state var s1 = SliderOne.A, s2 = SliderTwo.B; // Switch state switch (s1 | s2) { case SliderOne.A | SliderTwo.A : case SliderOne.A | SliderTwo.C : // Logic when State #1 is A, and State #2 is either A or C break; case SliderOne.B | SliderTwo.C : // Logic when State #1 is B, and State #2 is C break; case SliderOne.E | SliderTwo.E : default: // Logic when State #1 is E, and State #2 is E or // none of above match break; } 

然而,我同意其他的观点,25个案例逻辑中的25个案例并不太漂亮,如果其他案例在某些情况下可能会更好一些。 无论如何。

 var var1 = "something"; var var2 = "something_else"; switch(var1 + "|" + var2) { case "something|something_else": ... break; case "something|...": break; case "...|...": break; } 

如果你有5种可能性,你会得到25例。

首先, JavaScript的switch速度不及if/else (有时慢得多) 。

其次,使用具有多个variables的switch的唯一方法是将它们组合成一个原始(string,数字等)值:

 var stateA = "foo"; var stateB = "bar"; switch (stateA + "-" + stateB) { case "foo-bar": ... ... } 

但是,我个人更希望看到一组if / else语句。

编辑 :当所有的值都是整数时,看起来开关可以在Chrome中执行if / else。 看到评论。

我不相信一个开关/情况比一系列if / elseif更快。 他们做同样的事情,但如果/ elseif的你可以检查多个variables。 您不能在多个值上使用开关/shell。

您可以给每个滑块上的每个位置一个从1到1000000000不同的二进制值,然后使用总和。

如果每个组合的动作都是静态的,则可以构build一个二维数组:

 var data = [ [1,2,3,4,5], [6,7,8,9,10], [11,12,13,14,15], [16,17,18,19,20], [21,22,23,24,25] ]; 

上面的例子中的数字可以是任何东西,比如string,数组等等。现在取值是单线(假设滑块的取值范围是[0,5]):

 var info = data[firstSliderValue][secondSliderValue];