Bu çalışıyor:
switch (true) {
case liCount == 0:
setLayoutState('start');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount<=5 && liCount>0:
setLayoutState('upload1Row');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount<=10 && liCount>5:
setLayoutState('upload2Rows');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount>10:
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
}
Bu cevabın önceki bir versiyonu parantezlerin suçlu olduğunu düşünüyordu. Gerçekte, parantezler burada alakasızdır - gerekli olan tek şey switch(true){...}
ve sizin durum ifadelerinizin boole'lere göre değerlendirilmesi.
Çalışır çünkü, anahtara verdiğimiz değer, karşılaştırmak için temel olarak kullanılır. Sonuç olarak, mantıksal değerlere göre değerlendirilen durum ifadeleri de hangi durumun çalıştırılacağını belirleyecektir. Bunu tersine çevirebilir ve geçebilir switch(false){..}
ve istenen ifadelerin doğru yerine yanlış olarak değerlendirilmesini sağlayabilir .. ama kişisel olarak doğruluğu değerlendiren koşullarla uğraşmayı tercih edebilir. Ancak, o da işe yarıyor, bu yüzden ne yaptığını anlamak için akılda tutmaya değer.
Örneğin: liCount 3 ise, ilk karşılaştırma true === (liCount == 0)
, yani ilk durum yanlıştır. Anahtar daha sonra bir sonraki duruma geçer true === (liCount<=5 && liCount>0)
. Bu ifade, true olarak değerlendirilir, yani bu durum çalıştırılır ve break
. Daha açık hale getirmek için buraya parantezler ekledim, ancak ifadenizin karmaşıklığına bağlı olarak isteğe bağlıdırlar.
Oldukça basit ve (eğer yapmaya çalıştığınız şeye uyuyorsa), belki de uzun bir seri ìf() ... else if() ... else if () ...
çok fazla görsel gürültü veya kırılganlık getirebilecek uzun bir dizi koşulu idare etmenin düzgün bir yolu .
Geçerli kod olmasına rağmen standart olmayan bir model olduğundan dikkatli kullanın.