Это работает:
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;
}
Предыдущая версия этого ответа считала виновными круглые скобки.По правде говоря, круглые скобки здесь неактуальны - нужно только switch(true){...}
и чтобы выражения вашего случая оценивались в логические значения.
Это работает, потому что значение, которое мы даем переключателю, используется в качестве основы длясравнить с.Следовательно, выражения case, также вычисляющие логические значения, будут определять, какой регистр запускается.Можно также перевернуть это, передать switch(false){..}
и получить желаемое выражение, оцениваемое как ложное, а не истинное ... но лично предпочитающее иметь дело с условиями, которые оценивают как истинность.Тем не менее, это тоже работает, поэтому стоит иметь в виду, чтобы понять, что он делает.
Например: если liCount равен 3, первое сравнение равно true === (liCount == 0)
, что означает, что первый случай ложен.Затем переключатель переходит к следующему случаю true === (liCount<=5 && liCount>0)
.Это выражение имеет значение true, означающее, что этот случай выполняется, и заканчивается на break
.Я добавил здесь круглые скобки, чтобы сделать их понятнее, но они необязательны, в зависимости от сложности вашего выражения.
Это довольно простой и аккуратный способ (если он соответствует тому, что вы пытаетесь сделать) обработки длинной серии условий, где, возможно, длинная серия ìf() ... else if() ... else if () ...
может создать много визуального шумаили хрупкость.
Используйте с осторожностью, поскольку это нестандартный шаблон, несмотря на то, что он является допустимым кодом.