[javascript] से अधिक / कम से कम के लिए कथन स्विच करें



4 Answers

एक विकल्प:

var scrollleft = 1000;
switch (true)
{
    case (scrollleft > 1000):
      alert('gt');
      break;
    case (scrollleft <= 1000):
      alert('lt');
      break; 
}

डेमो: http://jsfiddle.net/UWYzr/

Question

तो मैं इस तरह एक स्विच स्टेटमेंट का उपयोग करना चाहता हूँ:

switch (scrollLeft) {
  case (<1000):
   //do stuff
   break;
  case (>1000 && <2000):
   //do stuff
   break;
}

अब मुझे पता है कि इनमें से कोई भी कथन ( <1000 ) या ( >1000 && <2000 ) काम नहीं करेगा (स्पष्ट रूप से विभिन्न कारणों से)। मैं जो पूछ रहा हूं वह ऐसा करने का सबसे प्रभावी तरीका है। if बयान में 30 का उपयोग करने से मुझे नफरत है, तो मैं स्विच सिंटैक्स का उपयोग करूंगा। क्या मैं कुछ भी कर सकता हूं?




आप मानदंडों के अनुरूप मानदंड और कार्य के साथ एक कस्टम ऑब्जेक्ट बना सकते हैं

var rules = [{ lowerLimit: 0,    upperLimit: 1000, action: function1 }, 
             { lowerLimit: 1000, upperLimit: 2000, action: function2 }, 
             { lowerLimit: 2000, upperLimit: 3000, action: function3 }];

इन मामलों में आप जो करना चाहते हैं उसके लिए कार्यों को परिभाषित करें (function1, function2 आदि को परिभाषित करें)

और नियमों का मूल्यांकन करें

function applyRules(scrollLeft)
{
   for(var i=0; i>rules.length; i++)
   {
       var oneRule = rules[i];
       if(scrollLeft > oneRule.lowerLimit && scrollLeft < oneRule.upperLimit)
       {
          oneRule.action();
       }
   }
}

ध्यान दें

अगर बयान में 30 का उपयोग करना नफरत है

कई बार अगर बयान पढ़ने और बनाए रखने में आसान होता है। मैं केवल ऊपर की सिफारिश करता हूं जब आपके पास बहुत सारी स्थितियां हों और भविष्य में बहुत अधिक विकास की संभावना हो।

अद्यतन करें
जैसा कि @ ब्रैड ने टिप्पणियों में बताया, यदि शर्तें पारस्परिक रूप से अनन्य हैं (उनमें से केवल एक ही समय में सच हो सकती है), ऊपरी सीमा की जांच पर्याप्त होनी चाहिए:

if(scrollLeft < oneRule.upperLimit)

बशर्ते कि शर्तों को आरोही क्रम में परिभाषित किया गया हो (उदाहरण के लिए सबसे पहले एक, 0 to 1000 , और फिर 1000 to 2000 )




//do stuff में आप वास्तव में क्या कर रहे हैं?

आप ऐसा कुछ करने में सक्षम हो सकते हैं:

(scrollLeft < 1000) ? //do stuff
: (scrollLeft > 1000 && scrollLeft < 2000) ? //do stuff
: (scrollLeft > 2000) ? //do stuff
: //etc. 



अगर बयान में 30 का उपयोग करना नफरत है

मेरे पास हाल ही में एक ही स्थिति थी, इस तरह मैंने इसे हल किया:

पहले:

if(wind_speed >= 18) {
    scale = 5;
} else if(wind_speed >= 12) {
    scale = 4;
} else if(wind_speed >= 9) {
    scale = 3;
} else if(wind_speed >= 6) {
    scale = 2;
} else if(wind_speed >= 4) {
    scale = 1;
}

बाद:

var scales = [[4, 1], [6, 2], [9, 3], [12, 4], [18, 5]];
scales.forEach(function(el){if(wind_speed > el[0]) scale = el[1]});

और यदि आप "1, 2, 3, 4, 5" सेट करते हैं तो यह भी आसान हो सकता है:

var scales = [4, 6, 9, 12, 18];
scales.forEach(function(el){if(wind_speed >= el) scale++});



यह एक और विकल्प है:

     switch (true) {
         case (value > 100):
             //do stuff
             break;
         case (value <= 100)&&(value > 75):
             //do stuff
             break;
         case (value < 50):
            //do stuff
             break;
     }





Related