यह काम:
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){...}
और आपके मामले की अभिव्यक्तियों के लिए बूलियन का मूल्यांकन करना है।
यह काम करता है, क्योंकि हम स्विच को जो मूल्य देते हैं उसका उपयोग तुलना करने के लिए आधार के रूप में किया जाता है। नतीजतन, बूलियन का मूल्यांकन करने वाले केस एक्सप्रेशन भी निर्धारित करेंगे कि कौन सा केस चलाया गया है। यह भी चारों ओर मोड़ सकता है, और पास हो switch(false){..}
सकता है और वांछित अभिव्यक्तियाँ सच के बजाय झूठ का मूल्यांकन करती हैं .. लेकिन व्यक्तिगत रूप से उन परिस्थितियों से निपटना पसंद करती हैं जो सत्यता का मूल्यांकन करती हैं। हालांकि, यह काम भी करता है, इसलिए यह समझने के लिए ध्यान देने योग्य है कि यह क्या कर रहा है।
उदाहरण: यदि liCount 3 है, तो पहली तुलना है true === (liCount == 0)
, जिसका अर्थ है कि पहला मामला गलत है। स्विच फिर अगले मामले पर जाता है true === (liCount<=5 && liCount>0)
। यह अभिव्यक्ति सत्य का मूल्यांकन करती है, जिसका अर्थ है कि यह मामला चलाया गया है, और इसे समाप्त करता है break
। मैंने इसे स्पष्ट करने के लिए कोष्ठक जोड़ा है, लेकिन आपकी अभिव्यक्ति की जटिलता के आधार पर वे वैकल्पिक हैं।
यह बहुत सरल है, और एक साफ-सुथरा तरीका है (यदि यह आप जो करने की कोशिश कर रहे हैं उसके साथ फिट बैठता है) स्थितियों की एक लंबी श्रृंखला से निपटने के लिए, जहां शायद बहुत लंबी श्रृंखला ìf() ... else if() ... else if () ...
दृश्य शोर या नाजुकता का परिचय दे सकती है।
वैध कोड होने के बावजूद सावधानी के साथ उपयोग करें, क्योंकि यह एक गैर-मानक पैटर्न है।