javascript - जावास्क्रिप्ट: स्विच स्थिति में एक शर्त का उपयोग करना




condition select-case (6)

उस गूंगे प्रश्न के लिए क्षमा करें। मैं जावास्क्रिप्ट स्विच-केस भाषा तत्व में किसी केस के लिए किसी शर्त का उपयोग कैसे कर सकता हूं? नीचे दिए गए उदाहरण की तरह, एक मामला मैच होना चाहिए जब चर liCount <= 5 और> 0 है; हालाँकि, मेरा कोड काम नहीं करता है:

switch (liCount) {
    case 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;                  
}

किसी भी सलाह के लिए धन्यवाद!

https://code.i-harness.com


आप रास्ता है कि अधूरा है। इस तरह से बयान के साथ इसे लिखें:

if(liCount == 0)
    setLayoutState('start');
else if(liCount<=5)
    setLayoutState('upload1Row');
else if(liCount<=10)
    setLayoutState('upload2Rows');

$('#UploadList').data('jsp').reinitialise();

या, यदि ChaosPandion जितना संभव हो उतना अनुकूलन करने की कोशिश कर रहा है:

setLayoutState(liCount == 0 ? 'start' :
               liCount <= 5 ? 'upload1Row' :
               liCount <= 10 ? 'upload2Rows' :
               null);

$('#UploadList').data('jsp').reinitialise();

आपका कोड काम नहीं करता है क्योंकि यह वह नहीं कर रहा है जो आप इसे करने की उम्मीद कर रहे हैं। स्विच ब्लॉक एक मूल्य में लेते हैं, और दिए गए मूल्य के प्रत्येक मामले की तुलना समानता के लिए करते हैं। आपका तुलना मूल्य एक पूर्णांक है, लेकिन आपके अधिकांश मामले भाव बूलियन मान के लिए हल करते हैं।

इसलिए, उदाहरण के लिए, liCount = 2 कहें। आपका पहला मामला मेल नहीं खाएगा, क्योंकि 2 != 0 आपका दूसरा मामला, (liCount<=5 && liCount>0) true मूल्यांकन करता true , लेकिन 2 != true , इसलिए यह मामला भी मेल नहीं खाएगा।

इस कारण से, जैसा कि कई अन्य लोगों ने कहा है, आपको एक श्रृंखला का उपयोग करना चाहिए if...then...else if ब्लॉक ऐसा करने के लिए।


यदि आप ऐसा करना चाहते हैं, if बयानों का उपयोग करना बेहतर होगा। उदाहरण के लिए:

if(liCount == 0){
    setLayoutState('start');
}
if(liCount<=5 && liCount>0){
    setLayoutState('upload1Row');
}
if(liCount<=10 && liCount>5){
    setLayoutState('upload2Rows');
}             
var api = $('#UploadList').data('jsp');
    api.reinitialise();

यदि आप कथन का उपयोग करना चाहते हैं:

if (liCount === 0) {
    setLayoutState('start');
} else if (liCount <= 5) {
    setLayoutState('upload1Row');
} else if (liCount <= 10) {
    setLayoutState('upload2Rows');
}
$('#UploadList').data('jsp').reinitialise();  

यह एक ऐसा मामला है जहां आपको क्लॉज़ का उपयोग करना चाहिए।


यह काम:

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 () ... की एक लंबी श्रृंखला ìf() ... else if() ... else if () ... दृश्य शोर या नाजुकता का एक बहुत परिचय हो सकता है।

वैध कोड होने के बावजूद सावधानी के साथ उपयोग करें, क्योंकि यह एक गैर-मानक पैटर्न है।








select-case