एक स्विच में कई मामलों के लिए टेस्ट, जैसे OR (||)


239

switch caseजब आप एक ही मामले में एक या बी के लिए परीक्षण करने की आवश्यकता होती है तो आप कैसे उपयोग करेंगे ?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}


मैंने कॉमा का उपयोग करते हुए पाया कि केवल 2 विकल्पों ने प्रत्येक मामले की अनुमति दी।
अगुस विदिसार I ने

जवाबों:


563

आप फ़ॉल-थ्रू का उपयोग कर सकते हैं:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}

69
इसे फॉल-थ्रू कहा जाता है ।
फेलिक्स क्लिंग

2
मुझे यह पता चलने से पहले मैंने सवाल पोस्ट किया था, लेकिन यह समुदाय के लिए उपयोगी होगा क्योंकि यह कहीं भी अच्छी तरह से प्रलेखित नहीं है ... आपको जवाब देने के लिए @SLaks धन्यवाद।
एंड्रेस

Hi @kei मुझे पता है कि यह इसके लिए उचित स्थान नहीं है, लेकिन आपने मेरे अंतिम प्रश्न का सही उत्तर दिया stackoverflow.com/questions/21049005/… क्या आप अपना उत्तर देना चाहेंगे?
लियोन गबन

1
मैं इस बिंदु को भी स्पष्ट कर सकता हूं: एक बार किसी मामले का मूल्यांकन करने के बाद यह सच होता है। और अधिक मामलों की जाँच नहीं की जाती, बस अंत तक निष्पादित सभी बयान: यानी "ब्रेक;" निर्देश या यदि स्विच समाप्त हो गया है।
BeauCielBleu


118

चूंकि अन्य उत्तरों ने बताया कि यह वास्तव में यह समझाए बिना कि यह कैसे काम करता है:

जब switchनिष्पादित होता है, तो यह पहले मिलान caseकथन को ढूंढता है और फिर स्विच के बाद कोड की प्रत्येक पंक्ति को तब तक निष्पादित करता है जब तक कि यह या तो एक breakस्टेटमेंट या switch( returnसंपूर्ण स्टेटमेंट को छोड़ने के लिए एक स्टेटमेंट) को हिट न कर दे । जब आप जानबूझकर इसे छोड़ देते हैं, breakतो अगले के तहत कोड caseभी निष्पादित हो जाता है जिसे फ़ॉल-थ्रू कहा जाता है । तो ओपी की आवश्यकता के लिए:

switch (pageid) {
   case "listing-page":
   case "home-page":
      alert("hello");
      break;

   case "details-page":
      alert("goodbye");
      break;
} 

breakबयानों को शामिल करना भूल जाना एक सामान्य आम कोडिंग गलती है और पहली बात यह है कि आपको अपनी switchअपेक्षा के अनुरूप काम नहीं करना चाहिए । इस कारण से कुछ लोग इस बात को स्पष्ट करने के लिए "के माध्यम से" कहने के लिए एक टिप्पणी डालना पसंद करते हैं कि जब उद्देश्य पर ब्रेक स्टेटमेंट को छोड़ दिया गया हो। मैं निम्नलिखित उदाहरण में ऐसा करता हूं क्योंकि यह थोड़ा अधिक जटिल है और दिखाता है कि कुछ मामलों में गिरने से पहले कोड को निष्पादित करने के लिए कोड कैसे शामिल हो सकते हैं:

switch (someVar) {
   case 1:
      someFunction();
      alert("It was 1");
      // fall through
   case 2:
      alert("The 2 case");
      // fall through
   case 3:
      // fall through
   case 4:
      // fall through
   case 5:
      alert("The 5 case");
      // fall through
   case 6:
      alert("The 6 case");
      break;

   case 7:
      alert("Something else");
      break;

   case 8:
      // fall through
   default:
      alert("The end");
      break;
}

आप (वैकल्पिक रूप से) एक defaultमामले को भी शामिल कर सकते हैं , जिसे निष्पादित किया जाएगा यदि कोई अन्य मामले मेल नहीं खाते हैं - यदि आप एक defaultऔर कोई मामले शामिल नहीं करते हैं तो कुछ भी नहीं होता है। आप (वैकल्पिक रूप से) डिफ़ॉल्ट मामले के माध्यम से गिर सकते हैं।

इसलिए मेरे दूसरे उदाहरण में अगर someVar1 है तो यह कॉल करेगा someFunction()और फिर आपको चार अलर्ट दिखाई देंगे क्योंकि यह कई मामलों से गुजरता है जिनमें से कुछ के तहत अलर्ट होता है। है someVar3, 4 या 5 आप दो अलर्ट देखना चाहते है। यदि someVar7 है, तो आप "कुछ और" देखेंगे और यदि यह 8 या कोई अन्य मूल्य है, तो आप "द एंड" देखेंगे।


4
// कमेंट थ्रू कमेंट माय फपस्टॉर्म स्टॉप मी-थ्रू स्टेटमेंट फॉर थ्रू द स्विच स्टेटमेंट, थैंक्स :)
Getz

यदि आप किसी ऑब्जेक्ट को वापस करने के लिए कॉल करते हैं, तो आप ब्रेक के बजाय रिटर्न का उपयोग कर सकते हैं : स्विच (एक्शन टाइप) {केस ADD: {newState; } मामला DELETE: {newState पर लौटें; } डिफ़ॉल्ट: {रिटर्न स्टेट; }}
डोमिनिका

14

आपको दो caseलेबल बनाने की आवश्यकता है ।

नियंत्रण पहले लेबल से दूसरे तक गिर जाएगा, इसलिए वे दोनों एक ही कोड को निष्पादित करेंगे।


9

आपको इसे स्विच करना होगा!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}

1
यह विधि बहुत नवीन है :-) मुझे यह पसंद है। लेकिन, जैसा कि यह क्लासिक "फॉल-थ्रू" की तुलना में अधिक पात्रों का उपयोग करता है, यह कम दिलचस्प हो जाता है :)
एलेक्सलाफॉर्ग

1
@AlexLaforge सबसे अजीब और विडंबनापूर्ण है कि एक और स्टैकहोवरफ्लो प्रश्न में इस तरह के उत्तर को पूरी तरह से डाउनवोट किया गया था। लेकिन फिर भी मैं इस जवाब का समर्थन करता हूं और सहमत हूं, यह लचीली परिस्थितियों के लिए अच्छा समाधान है।
एलेक्सनिकोव

3

भूल जाओ switchऔर break, चलो साथ खेलते हैं if। और जोर देने के बजाय

if(pageid === "listing-page" || pageid === "home-page")

मामलों के साथ कई ऐरे बनाने देता है और इसे Array.prototype.includes () के साथ जाँचता है

var caseA = ["listing-page", "home-page"];
var caseB = ["details-page", "case04", "case05"];

if(caseA.includes(pageid)) {
    alert("hello");
}
else if (caseB.includes(pageid)) {
    alert("goodbye");
}
else {
    alert("there is no else case");
}

-6

अलग मामले के लिए अल्पविराम का उपयोग करें

switch (pageid)
{
    case "listing-page","home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.