2015-09-10 48 views
0

就像問題所說,是否有可能使用|| (或)在交換機?這裏是一個例子:有沒有辦法在開關中使用OR?

var color = "green"; 
var model = "ford"; 
switch (color || model) 
{ 
    case "red": 
     document.write("red"); 
     break; 
    case "blue": 
     document.write("blue"); 
     break; 
    case "ford": 
     document.write("Ford"); 
     break; 
    case "yellow": 
     document.write("yellow"); 
     break; 
    default: 
     document.write("purple"); 
     break; 
} 

我知道這是可以做到這一點與if else語句。我只是想知道這是否可以用switch語句完成。

+1

你可以寫'開關(色||模型)'但是我想你不期望的結果:-)因爲這個運算符之前評估過,並且只有'color'具有_falsey_值,比如_false_,_null_,_undefined_等時才檢查'model'值。 – Grundy

+0

如果SWITCH具有IF的相同工作,那麼爲什麼IF是那裏?對於Switch來說只是NO,使用IF。 –

+0

好像你只需要將'switch'分爲兩個:一個用於顏色,另一個用於模型 – Grundy

回答

-1

不喜歡你上面提到的,但這是你如何實現或開關:

var item = "green"; 
switch (item) 
{ 
    case "red": 
    case "ford": 
     document.write("red or ford"); 
     break; 
    case "blue": 
    case "honda": 
     document.write("blue or honda"); 
     break; 
    default: 
     document.write("purple"); 
     break; 
} 
+0

你可以用'item'作爲[color,model]來包裝它 – jeremy

+0

儘管他沒有做他想做的事。你仍然只評估一個值而不是兩個潛在值。 –

+3

這不是OP要求的。 – epascarello

0

沒有,你可以做的最接近的是這樣的:

var color = "green"; 
var model = "ford"; 
var check = function(val) { 
    return color == val || model == val; 
} 
switch (true) 
{ 
    case check("red"): 
    document.write("red"); 
    break; 
    case check("blue"): 
    document.write("blue"); 
    break; 
    case check("ford"): 
    document.write("Ford"); 
    break; 
    case check("green"): 
    document.write("yellow"); 
    break; 
    default: 
    document.write("purple"); 
    break; 
} 
+0

而在這種情況下,如果其他情況會更好。 :) – epascarello

1

亞蘭的答案帶回路

[color, model].forEach(function(item) { 
    switch (item) { 
     case "red": 
     case "ford": 
      document.write("red or ford"); 
      break; 
     default: 
      document.write("purple"); 
    } 
}); 
+1

這更接近了,但你應該放棄模擬Adam的答案並恢復原始部分。但即使如此,你還是有一個問題,原來只能執行一個分支,但是你可以執行兩個分支(除非這是他想要的)。 –

+0

好點。希望這足以讓他通過綜合選項來解決問題。 – jeremy

1

感覺就像你試圖用一個開關箱做太多事,這會讓它更難以馬上隨着時間的推移,我建議將它重構成函數調用。也許是這樣的:

var values = { 
    'red': 'red', 
    'blue': 'blue', 
    'ford': 'Ford', 
    'yellow': 'yellow' 
}; 

function getValue(key) { 
    return key in values 
    ? values[key] 
    : 'purple'; 
} 

document.write(getValue('green')); 
document.write(getValue('ford')); 
+0

這是迄今爲止最好的,假設他想要執行這兩個。如果不是,你可以執行'document.write(getValue(「green」,「ford」))''並在'getValue()'中迭代'arguments'對象。 –

0

沒有,但不同的比較的情況下表達:

var color = "green"; 
 
var model = "ford"; 
 
switch (true) { 
 
    case color === "red": 
 
     document.write("red"); 
 
     break; 
 
    case color === "blue": 
 
     document.write("blue"); 
 
     break; 
 
    case model === "ford": 
 
     document.write("Ford"); 
 
     break; 
 
    case color === "yellow": 
 
     document.write("yellow"); 
 
     break; 
 
    default: 
 
     document.write("purple"); 
 
     break; 
 
}