Những công việc này:
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;
}
Phiên bản trước của câu trả lời này coi dấu ngoặc đơn là thủ phạm. Trên thực tế, dấu ngoặc đơn không liên quan ở đây - điều duy nhất cần thiết là switch(true){...}
và để các biểu thức trường hợp của bạn đánh giá thành boolean.
Nó hoạt động bởi vì, giá trị chúng tôi cung cấp cho công tắc được sử dụng làm cơ sở để so sánh với. Do đó, các biểu thức trường hợp, cũng được đánh giá thành boolean sẽ xác định trường hợp nào được chạy. Cũng có thể xoay chuyển điều này, và vượt qua switch(false){..}
và có các biểu thức mong muốn được đánh giá thành sai thay vì đúng .. nhưng cá nhân tôi thích xử lý các điều kiện đánh giá tính trung thực. Tuy nhiên, nó cũng hoạt động, vì vậy cần ghi nhớ để hiểu những gì nó đang làm.
Ví dụ: nếu liCount là 3, so sánh đầu tiên là true === (liCount == 0)
, nghĩa là trường hợp đầu tiên là sai. Sau đó, công tắc chuyển sang trường hợp tiếp theo true === (liCount<=5 && liCount>0)
. Biểu thức này đánh giá là true, nghĩa là trường hợp này được chạy và kết thúc tại break
. Tôi đã thêm dấu ngoặc đơn ở đây để làm rõ ràng hơn, nhưng chúng là tùy chọn, tùy thuộc vào mức độ phức tạp của biểu thức của bạn.
Nó khá đơn giản và là một cách gọn gàng (nếu nó phù hợp với những gì bạn đang cố gắng làm) để xử lý một loạt điều kiện dài, trong đó có lẽ một loạt điều kiện dài ìf() ... else if() ... else if () ...
có thể gây ra nhiều nhiễu hình ảnh hoặc độ mỏng manh.
Hãy sử dụng một cách thận trọng, vì đây là một mẫu không chuẩn, mặc dù là mã hợp lệ.