Isso funciona:
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;
}
Uma versão anterior dessa resposta considerava os parênteses os culpados. Na verdade, os parênteses são irrelevantes aqui - a única coisa necessária é switch(true){...}
e para que suas expressões de caso sejam avaliadas como booleanos.
Funciona porque o valor que atribuímos ao switch é usado como base para comparação. Consequentemente, as expressões de caso, também avaliando para booleanos, determinarão qual caso será executado. Também poderia inverter isso e passar switch(false){..}
e ter as expressões desejadas avaliadas como falsas em vez de verdadeiras ... mas pessoalmente prefere lidar com condições que avaliam a veracidade. No entanto, também funciona, portanto, vale a pena ter em mente para entender o que está fazendo.
Ex: se liCount for 3, a primeira comparação é true === (liCount == 0)
, o que significa que o primeiro caso é falso. O switch então passa para o próximo caso true === (liCount<=5 && liCount>0)
. Esta expressão é avaliada como verdadeira, o que significa que este caso é executado e termina no break
. Eu adicionei parênteses aqui para deixar isso mais claro, mas eles são opcionais, dependendo da complexidade de sua expressão.
É muito simples e uma maneira legal (se se encaixa com o que você está tentando fazer) de lidar com uma longa série de condições, onde talvez uma longa série de ìf() ... else if() ... else if () ...
pode introduzir muito ruído visual ou fragilidade.
Use com cautela, pois é um padrão fora do padrão, apesar de ser um código válido.