2015-09-10 3 views
0

Как и в случае с вопросом, можно ли использовать || (ИЛИ) в коммутаторе? Вот пример:Есть ли способ использовать ИЛИ в коммутаторе?

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

вы можете написать 'переключатель (цвет || модель)', но я думаю, вы получите не ожидаемый результат :-), потому что этот оператор evaluted раньше, и вы проверяете значение 'model' только в том случае, если' color' имеет значение _falsey_, например _false_, _null_, _undefined_ и т. д. – Grundy

+0

Если SWITCH имеет такую ​​же работу IF, то почему IF есть? Просто НЕТ для коммутатора, используйте 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

Это не то, о чем просил ОП. – 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

Это ближе, но вы должны отбросить часть, которая эмулирует ответ Адама и вернуться к оригиналу. Но даже тогда у вас есть проблема в том, что оригинал выполнил бы только одну ветку, но ваш мог бы выполнить два (если это не то, что он хотел). –

+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 (« зеленый »,« ford »)) и перебрать объект' arguments' в 'getValue()'. –

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; 
 
}

Смежные вопросы