JavaScript'te birden fazla durum için switch ifadesi


JavaScript'te switch ifadesinde birden fazla duruma ihtiyacım var, Şöyle bir şey:

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

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

Bunu nasıl yapabilirim? JavaScript'te böyle bir şey yapmanın bir yolu yoksa, DRY prensibine de uyan alternatif bir çözümü bilmek istiyorum.

Cevap #1

switch ifadesinin geçiş-üzerinden (fall-through) özelliğini kullanın. Eşleşen bir case, bir break (veya switch ifadesinin sonu) bulunana kadar çalışır, bu yüzden bunu şöyle yazabilirsiniz:

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

   default: 
       alert('Default case');
}

Cevap #2

Bu, normal JavaScript'te çalışır:

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

Cevap #3

İşte switch ifadesinden tamamen kaçınan farklı bir yaklaşım:

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

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

Cevap #4

Javascript'te bir switch içinde birden fazla durumu atamak için, aşağıda gösterildiği gibi aralarında break olmadan farklı case tanımlamamız gerekir:

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

Lütfen örneğe bakmak için linke tıklayın

Cevap #5

Bunu açıklık ve tekrar etmeyen bir sözdizimi için seviyorum.

varName = "larry";

switch (true)
{
    case ["afshin", "saeed", "larry"].includes(varName) :
       alert('Hey');
       break;

    default:
       alert('Default case');

}

Cevap #6

Eğer ES6 kullanıyorsanız, bunu yapabilirsiniz:

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

Veya daha eski JavaScript sürümleri için, bunu yapabilirsiniz:

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

Dikkat edin, includes bazı tarayıcılarda, eski IE sürümleri dahil, çalışmayacaktır, ancak işleri oldukça kolay bir şekilde düzeltebilirsiniz. Daha fazla bilgi için javascript'te bir dizide string olup olmadığını belirleme sorusuna bakın.

Cevap #7

Benim durumum şuna benzeyen bir şeydi:

switch (text) {
  case SOME_CONSTANT || ANOTHER_CONSTANT:
    console.log('Case 1 entered');

  break;

  case THIRD_CONSTANT || FINAL_CONSTANT:
    console.log('Case 2 entered');

  break;

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

default durumu her zaman girilir. Benzer bir çok durumlu switch ifadesi sorunu yaşıyorsanız, aradığınız şey şudur:

switch (text) {
  case SOME_CONSTANT:
  case ANOTHER_CONSTANT:
    console.log('Case 1 entered');

  break;

  case THIRD_CONSTANT:
  case FINAL_CONSTANT:
    console.log('Case 2 entered');

  break;

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

Cevap #8

Stefano'nun cevabını ekleyerek ve netleştirerek, switch'teki koşulların değerlerini dinamik olarak ayarlamak için ifadeleri kullanabilirsiniz, örneğin:

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

    case 6: console.log('6');
}

Yani senin sorunda, şöyle bir şey yapabilirsin:

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

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

Her ne kadar çok KURU olsa da...

İlgili makaleler