[javascript] JavaScript로 여러 사례 전환

JavaScript의 switch 문에 여러 경우가 필요합니다.

switch (varName)
{
   case "afshin", "saeed", "larry":
       alert('Hey');
       break;

   default:
       alert('Default case');
       break;
}

어떻게해야합니까? JavaScript에서 이와 같은 것을 할 수있는 방법이 없다면 DRY concept을 따르는 대안 솔루션을 알고 싶습니다 .



답변

switch명세서 의 대체 기능을 사용하십시오 . 일치하는 케이스는 break(또는 switch명령문 의 끝 )이 발견 될 때까지 실행 되므로 다음과 같이 작성할 수 있습니다.

switch (varName)
{
   case "afshin":
   case "saeed":
   case "larry":
       alert('Hey');
       break;

   default:
       alert('Default case');
}


답변

이것은 일반적인 JavaScript에서 작동합니다

function theTest(val) {
  var answer = "";
  switch( val ) {
    case 1: case 2: case 3:
      answer = "Low";
      break;
    case 4: case 5: case 6:
      answer = "Mid";
      break;
    case 7: case 8: case 9:
      answer = "High";
      break;
    default:
      answer = "Massive or Tiny?";
  }
  return answer;
}

theTest(9);

건배.


답변

switch진술을 완전히 피하는 다른 접근법이 있습니다 .

var cases = {
  afshin: function() { alert('hey'); },
  _default: function() { alert('default'); }
};
cases.larry = cases.saeed = cases.afshin;

cases[ varName ] ? cases[ varName ]() : cases._default();


답변

스위치에서 여러 사례를 할당하려면 Javascript에서 다음 different case without break inbetween과 같이 정의해야 합니다.

   <script>
      function checkHere(varName){
        switch (varName)
           {
           case "saeed":
           case "larry":
           case "afshin":
                alert('Hey');
                break;
          case "ss":
               alert('ss');
               break;
         default:
               alert('Default case');
               break;
       }
      }
     </script>

링크 클릭 예를 참조하십시오


답변

ES6를 사용하는 경우 다음을 수행 할 수 있습니다.

if (['afshin', 'saeed', 'larry'].includes(varName)) {
   alert('Hey');
} else {
   alert('Default case');
}

또는 이전 버전의 JavaScript의 경우 다음을 수행 할 수 있습니다.

if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
   alert('Hey');
} else {
   alert('Default case');
}

이전 IE 브라우저에서는 작동하지 않지만 상당히 쉽게 패치 할 수 있습니다. 자세한 내용은 javascript에서 문자열이 목록에 있는지 확인 하는 질문 을 참조하십시오.


답변

노드에서 다음을 수행 할 수있는 것으로 보입니다.

data = "10";
switch(data){
case "1": case "2": case "3": //put multiple cases on the same line to save vertical space.
   console.log("small"); break;
case "10": case "11": case "12":
   console.log("large"); break;
default:
   console.log("strange");
   break;
}

이것은 어떤 경우에는 훨씬 더 작은 코드를 만듭니다.


답변

Stefano의 답변을 추가하고 명확히하기 위해 표현식을 사용하여 스위치의 조건 값을 동적으로 설정할 수 있습니다.

var i = 3
switch (i) {
    case ((i>=0 && i<=5)?i:-1): console.log('0-5'); break;
    case 6: console.log('6');
}

따라서 문제에서 다음과 같이 할 수 있습니다.

var varName = "afshin"
switch (varName) {
    case (["afshin", "saeed", "larry"].indexOf(varName)+1 && varName):
      console.log("hey");
      break;

    default:
      console.log('Default case');
}

너무 건조하지는 않지만 ..