2016-07-27 3 views
0

는이 같은 switch 문이있다. 나는 이런 식으로 쓰고 싶습니다 :switch 문에서 특정 경우에 여러 코드 블록을 실행하는 방법은 무엇입니까?</p> <pre><code>switch(a) { case 0: // do something break; case 1: // do something else break; } </code></pre> <p>내가하고 싶은 것은, 예를 들어 때 <code>a == 2</code> 코드의 두 블록을 실행할 수 있습니다 :

switch(a) { 
    case 0: 
    case 2: 
     // do something 
     break; 
    case 1: 
    case 2: 
     // do something else 
     break; 
} 

그러나 첫 번째 break 문이 전체 switch 문을 끝내기 때문에 분명히 작동하지 않습니다. 내가 도우미 함수를 작성했다 가지고 올 수

있는 유일한 방법은 :

function case0() { 
    // do something 
} 

function case1() { 
    // do something else 
} 

switch(a) { 
    case 0: 
     case0(); 
     break; 
    case 1: 
     case1(); 
     break; 
    case 2: 
     case0(); 
     case1(); 
     break; 
} 

이 솔루션은 약간 장황하고 나에게 추한 것 같다. 내가 원하는 것을 성취 할 수있는 더 좋은 방법이 있습니까?

+1

'switch' 문은 충분히 복잡합니다. 당신이 제안하는 것은 그들이 근본적인 수준에서 어떻게 작동하는지에 대한 변화입니다. 왜 함수에 대한 링크를 가질 수있는 매핑 테이블을 사용하지 않습니까? 예를 들어'{2 : function() {...}} '. – tadman

+0

글쎄요, 제가 '스위치'에 보관하고 싶은 주된 이유는 'switch'문장에 프로젝트를 구현 한 것이고, 제가 설명했던 것을 수행 할 수 있도록 다른 모든 것을 다시 쓰고 싶지 않다는 것입니다. – BoltKey

+0

당신이 원하는 것과 JavaScript가 할 수있는 것은 두 가지입니다. 현실에 굴복하거나 싸우려는 인생을 보내고 싶습니까? 원하는 경우 [TC39를 통해 ECMAScript 그룹에게 청원] (https://tc39.github.io/process-document/)에 오신 것을 환영합니다. 때때로 우리가 생각하는 접근 방식이 최선의 방법이 아닙니다. 배우고, 적응하고, 계속 나아갑니다. – tadman

답변

2

switch 문 코드는 첫 번째 true 조건에서 가장 가까운 break까지 실행됩니다. 따라서 다음과 같은 경우 귀하의 경우에 효과가있을 수 있습니다.

글쎄, 내 솔루션은 자격 여부를 "더 좋은"의 당신의 정의에 따라 달라집니다 ... 당신이 원하는 것을 달성하기 위해 더 좋은 방법이 있다면

var a = 2;//1;//0;//-1; 
switch(a){ 
    case 2: //and also one and zero 
    console.log('two'); 
    case 1: //and also zero 
    console.log('one'); 
    case 0: //zero only 
    console.log('zero'); 
    break; 
    default: //no matches 
    console.log('default'); 
} 
+0

이러한 유형의 실행은 fall through 실행이라고 부릅니다 - 이해하고있는대로, break 문없이 스위치는 첫 번째 true 조건을 찾고 모든 case를 실행중인 switch의 닫는 중괄호로 넘어갑니다. 이러한 유형의 실행은 C#, C++, Java, javascript 및 다른 몇몇 사람들에게는 확실합니다. VB.net은 일반적인 합의에 충실하지 않는 하나의 언어입니다. –

+0

이 답변은 문제를 해결하는 데 매우 가깝지만 사례 1을 독립적으로 실행할 수 없습니다. – trevor

0

당신은 물었지만, 여기있다 어쨌든 :

switch(a) { 
    case 0: 
    caseHandler([0]); 
    break; 
    case 1: 
    caseHandler([1]); 
    break; 
    case 2: 
    caseHandler([0,1]); 
    break; 
} 

을 그리고 단일 도우미 쿵푸에 값의 배열을 전달합니다

이 같은 스위치 문을 만들 수 있습니다

function caseHandler(values) { 
    for (var i = 0; i < values.length; i++) { 
    switch (values[i]) { 
     case 0: 
     console.log('doing zero stuff'); 
     break; 
     case 1: 
     console.log('doing one stuff'); 
     break; 
    } 
    } 
} 
관련 문제