Ini bekerja:
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;
}
Versi sebelumnya dari jawaban ini menganggap tanda kurung sebagai pelakunya. Sebenarnya, tanda kurung tidak relevan di sini - satu-satunya hal yang diperlukan adalah switch(true){...}
dan agar ekspresi kasus Anda dievaluasi menjadi boolean.
Ini berfungsi karena, nilai yang kami berikan ke sakelar digunakan sebagai dasar untuk membandingkan. Akibatnya, ekspresi kasus, juga mengevaluasi ke boolean akan menentukan kasus mana yang dijalankan. Bisa juga membalikkan ini, dan lulus switch(false){..}
dan memiliki ekspresi yang diinginkan mengevaluasi salah daripada benar .. tetapi secara pribadi lebih suka berurusan dengan kondisi yang mengevaluasi kebenaran. Namun, itu berhasil juga, jadi perlu diingat untuk memahami apa yang dilakukannya.
Misalnya: jika liCount adalah 3, perbandingan pertama adalah true === (liCount == 0)
, artinya kasus pertama salah. Sakelar kemudian beralih ke kasus berikutnya true === (liCount<=5 && liCount>0)
. Ekspresi ini mengevaluasi true, yang berarti kasus ini dijalankan, dan diakhiri di break
. Saya telah menambahkan tanda kurung di sini untuk membuatnya lebih jelas, tetapi itu opsional, tergantung pada kompleksitas ekspresi Anda.
Ini cukup sederhana, dan cara yang rapi (jika sesuai dengan apa yang Anda coba lakukan) untuk menangani serangkaian kondisi yang panjang, di mana mungkin rangkaian panjang ìf() ... else if() ... else if () ...
dapat menimbulkan banyak gangguan visual atau kerapuhan.
Gunakan dengan hati-hati, karena ini adalah pola non-standar, meskipun merupakan kode yang valid.