2013-09-19 5 views
1

У меня есть проблема с оператором 'case' в 'switch' Оператор в скрипте Java. Мой вопрос заключается в том, как написать более одного номера в выражении «case» и сохранить всю работу над написанием нескольких команд для каждого номера, плохо попробуйте объяснить себя лучше. Я хочу написать в заявлении дела номер 10-14 (10,11,12,13,14). как я могу его написать? спасибо за помощь и извините за мой плохой английский.Jazzcript case case в switch Statement

name = prompt("What's your name?") 
switch (name) 
{ 
    case "Ori": 
     document.write("<h1>" + "Hello there Ori" + "<br>") 
     break; 

    case "Daniel": 
     document.write("<h1>" + "Hi, Daniel." + "<br>") 
     break; 

    case "Noa": 
     document.write("<h1>" + "Noa!" + "<br>") 
     break; 

    case "Tal": 
     document.write("<h1>" + "Hey, Tal!" + "<br>") 
     break; 

    default: 
     document.write("<h1>" + name + "<br>") 
} 
age = prompt ("What's your age?") 
switch (age) 
{ 
case "10": 
document.write("you are too little" + name) 
break; 

case "14": 
document.write("So , you are in junior high school" + name) 
break; 

case "18": 
document.write("You are a grown man" + name) 
break; 

default: 
document.write("That's cool" + name) 
break; 
} 

ответ

1

Заканчивать этот ответ Switch on ranges of integers in JavaScript

В итоге вы можете сделать это

var x = this.dealer; 
switch (true) { 
    case (x < 5): 
     alert("less than five"); 
     break; 
    case (x > 4 && x < 9): 
     alert("between 5 and 8"); 
     break; 
    case (x > 8 && x < 12): 
     alert("between 9 and 11"); 
     break; 
    default: 
     alert("none"); 
     break; 
} 

но такого рода поражения цели переключателя заявление, потому что вы могли бы просто цепь если-иначе statments , Или вы можете это сделать:

switch(this.dealer) { 
     case 1: 
     case 2: 
     case 3: 
     case 4: 
      // Do something. 
      break; 
     case 5: 
     case 6: 
     case 7: 
     case 8: 
      // Do something. 
      break; 
     default: 
      break; 
    } 
+0

Да, я не вижу преимущества 'switch (true)' над серией операторов if-else. – plalx

+1

Посмотрите на мой ответ, вам может показаться интересным. – plalx

0

использовать это, если вы не обеспечить перерыв, то управление будет падать вниз, Таким образом, вы можете сопрягать для группы номеров в коммутаторе.

case 10: 
case 11: 
case 12: 
case 14: 
case 15: document.write("i am less than or equal to 15");break; 
0

Допустим, вы хотели, чтобы включить ряд 10-14 (10,11,12,13,14), вы можете приковать дела вместе:

switch(number) { 
    case 10: 
    case 11: 
    case 12: 
    case 13: 
    case 14: 
    alert("I'm between 10 and 14"); 
    break; 
    default: 
    alert("I'm not between 10 and 14"); 
    break; 
} 
0

Вы можете просто опустить break; заявление ,

switch (2) { 
    case 1: case 2: case 3: 
     console.log('1 or 2 or 3'); 
     break; 
    default: 
     console.log('others'); 
     break; 
} 

Я хотел играть с концепцией немного, я не рекомендую этот подход, однако вы также можете рассчитывать на функцию, которая будет создавать функцию потока управления для вас. Это просто позволяет использовать синтаксический сахар.

var createCaseFlow = (function() { 
    var rangeRx = /^(\d)-(\d)$/; 

    function buildCases(item) { 
     var match = item.match(rangeRx), 
      n1, n2, cases; 

     if (match) { 
      n1 = parseInt(match[1], 10); 
      n2 = parseInt(match[2], 10); 
      cases = []; 

      for (; n1 <= n2; n1++) { 
       cases.push("case '" + n1 + "':"); 
      } 

      return cases.join(''); 
     } 

     return "case '" + item + "':"; 
    } 

    return function (cases, defaultFn) { 
     var fnStrings = ['switch (value.toString()) { '], 
      k; 

     for (k in cases) { 
      if (cases.hasOwnProperty(k)) { 
       fnStrings.push(k.split(',').map(buildCases).join('') + "return this[0]['" + k + "'](); break;"); 
      } 
     } 

     defaultFn && fnStrings.push('default: return this[1](); break;'); 

     return new Function('value', fnStrings.join('') + '}').bind(arguments); 
    }; 

})(); 

var executeFlow = createCaseFlow({ 
     '2-9': function() { 
      return '2 to 9'; 
     }, 
     '10,21,24': function() { 
      return '10,21,24'; 
     } 
    }, 
    function() { 
     return 'default case'; 
    } 
); 

console.log(executeFlow(5)); //2 to 9 
console.log(executeFlow(10)); //10,21,24 
console.log(executeFlow(13)); //default case 
-1

Вы уже получили несколько ответов о том, как это сделать. Тем не менее, я хочу указать еще несколько вещей. Во-первых, лично я бы не использовал оператор switch/case для этого, так как существует так много подобных случаев - классическая if/elseif/else цепь здесь более уместна.

В зависимости от сценария использования вы можете также извлечь функцию, а затем использовать переключатель/случай (с более значимыми именами и значениями, конечно):

function getCategory (number) { 
    if(number > 20) { 
     return 3; 
    } 
    if(number > 15) { 
     return 2; 
    } 
    if(number > 8) { 
     return 1; 
    } 

    return 0; 
} 

switch(getCategory(someNumber)) { 
    case 0: 
     // someNumber is less than or equal to 8 
     break; 
    case 1: 
     // someNumber is any of 9, 10, 11, 12, 13, 14, 15 
     break; 
    // ... 
} 

Если интервалы равномерно распределены, вам может также сделать что-то вроде этого:

switch(Math.floor(someNumber/5)) { 
    case 0: 
     // someNumber is any one of 0, 1, 2, 3, 4 
     break; 
    case 1: 
     // someNumber is any one of 5, 6, 7, 8, 9 
     break; 
    // ... 
} 

Кроме того, следует отметить, что некоторые люди считают включение/тематические заявления с падением проходных (= Опуская break; заявление о зашедших случаях) плохая практика, хотя другие считают, что это прекрасно.

+0

Я всегда играю, но никогда не буду использовать это в производственном коде. Это хорошая скрипка. –

+0

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

+0

Мне не очень нравится идея использования строковых значений для сравнения чисел, я хотел бы придерживаться того же типа. Это, безусловно, нарушает функциональность IDE для распознавания того, что происходит. Я просто не вижу преимущества над if/elseif/else или, если для этого используется прецедент, категория типа обработки, которая заставляет меня идти «Да, вот и все!». –