Esto 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;
}
Una versión anterior de esta respuesta consideraba que el paréntesis era el culpable. En verdad, los paréntesis son irrelevantes aquí; lo único que se necesita es que las switch(true){...}
expresiones de caso se evalúen como booleanos.
Funciona porque el valor que le damos al interruptor se utiliza como base para comparar. En consecuencia, las expresiones de caso, que también se evalúan como booleanos, determinarán qué caso se ejecuta. También podría dar la vuelta a esto, pasar switch(false){..}
y hacer que las expresiones deseadas se evalúen como falso en lugar de verdadero ... pero personalmente prefiero lidiar con condiciones que evalúan la veracidad. Sin embargo, también funciona, por lo que vale la pena tenerlo en cuenta para comprender lo que está haciendo.
Por ejemplo: si liCount es 3, la primera comparación es true === (liCount == 0)
, lo que significa que el primer caso es falso. Luego, el interruptor pasa al siguiente caso true === (liCount<=5 && liCount>0)
. Esta expresión se evalúa como verdadera, lo que significa que este caso se ejecuta y termina en break
. He añadido paréntesis aquí para que quede más claro, pero son opcionales, según la complejidad de su expresión.
Es bastante simple y una forma ordenada (si encaja con lo que está tratando de hacer) de manejar una larga serie de condiciones, donde tal vez una larga serie ìf() ... else if() ... else if () ...
podría introducir mucho ruido visual o fragilidad.
Úselo con precaución, porque es un patrón no estándar, a pesar de ser un código válido.