यदि कोई संख्या दो मानों के बीच है, तो कैसे जांचें?


144

जावास्क्रिप्ट में, मैं ब्राउज़र को कुछ करने के लिए कह रहा हूं यदि विंडो का आकार 500px से अधिक है। मुझे यह पसंद है:

if (windowsize > 500) {
    // do this
}

यह बहुत अच्छा काम करता है, लेकिन मैं इस पद्धति को लागू करना चाहता हूं, लेकिन संख्याओं की एक सीमा के साथ। इसलिए मैं अपने ब्राउज़र को यह बताना चाहूंगा कि यदि विंडो का आकार 500px और 600px के बीच हो तो सामान करना चाहिए। मुझे पता है कि यह काम नहीं करेगा, लेकिन यहाँ है कि मैंने इसकी कल्पना कैसे की:

if (windowsize > 500-600) {
    // do this
}

क्या जावास्क्रिप्ट के भीतर भी यह संभव है?


9
इस प्रश्न को बंद करने के लिए थोड़ा कठोर लगता है। क्या मैं इसे फिर से खोलने के लिए वोट कर सकता हूं। यह अच्छी तरह से लिखा गया है और नमूना कोड देता है।
कैल्टर

निश्चित रूप से अधिक सही जाँच होगी यदि (windowsize> = 500 && windowsize <= 600) या यदि (((
Windowsize

जवाबों:


225

टेस्ट कि windowsizeतुलना में अधिक है 500और 600अर्थ से कम है कि न तो मूल्यों 500या 600खुद ही परिणाम सच हो जाएगा।

if (windowsize > 500 && windowsize < 600) {
  // ...
}

1
धन्यवाद अपरिभाषित, बस इस बात की पुष्टि करने के लिए कि ब्राउज़र के भीतर मैं क्या चाहता हूं जब विंडो का आकार अधिक होता है तो 500px और 600px से कम, अनिवार्य रूप से केवल 500-600px की सीमा के भीतर काम करना, सही? (मैं इस सामान के साथ बहुत अच्छा नहीं हूँ)
Dyck

1
@ डाइक हां, यह ऐसा करता है :), ध्यान दें कि jQuery केवल एक जावास्क्रिप्ट लाइब्रेरी है।
अपरिभाषित

7
ध्यान रखें कि यह स्थिति केवल तभी सही होती windowsizeहै जब कम से कम 501px और अधिकतम 599px हो। 500px और 600px को बाहर रखा गया है। यदि आप इन मूल्यों को शामिल करना चाहते हैं तो तुलना में समानता जोड़ें।
रॉबर्ट कोरिटनिक 14

3
बस एक विवरण, लेकिन निम्नलिखित तरीके से अधिक पठनीय है:if(500 < windowsize && windowsize < 600)
जियोवानी बेनुसी

119

मेरे पास एक पल था, इसलिए, हालांकि आप पहले से ही एक जवाब स्वीकार कर चुके हैं, मैंने सोचा कि मैं निम्नलिखित योगदान करूंगा:

Number.prototype.between = function(a, b) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));

जेएस फिडेल डेमो

या, यदि आप एक नंबर की जांच करने का विकल्प रखना चाहते हैं, तो अंतिम बिंदुओं सहित परिभाषित सीमा में है :

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return inclusive ? this >= min && this <= max : this > min && this < max;
};

var windowSize = 500;

console.log(windowSize.between(500, 603, true));

जेएस फिडेल डेमो

उपरोक्त में एक मामूली संशोधन जोड़ने का सुझाव दिया गया है, जो टिप्पणी में उल्लिखित है -

Function.prototype.apply()धीमी है! जब आपके पास निश्चित मात्रा में तर्क होते हैं, तो इसे कॉल करने के अलावा…

इसके उपयोग को हटाने के लायक था Function.prototype.apply(), जो उपरोक्त तरीकों के संशोधित संस्करणों की पैदावार करता है, सबसे पहले 'समावेशी' विकल्प के बिना:

Number.prototype.between = function(a, b) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));

जेएस फिडेल डेमो

और 'समावेशी' विकल्प के साथ:

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return inclusive ? this >= min && this <= max : this > min && this < max;
}

var windowSize = 500;

console.log(windowSize.between(500, 603, true));

जेएस फिडेल डेमो

संदर्भ:


6
सीधे कॉल करने के बजाय लागू का उपयोग क्यों करें Main.min(a,b)? फ़ंक्शन .prototype.apply धीमा है! जब आपके पास निश्चित मात्रा में तर्क होते हैं, तो इसे कॉल करना व्यर्थ है।
स्टील ब्रेन

मैं इसे अपने डिफ़ॉल्ट टूलबॉक्स में जोड़ने जा रहा हूं - इस योगदान के लिए बहुत आसान और धन्यवाद!
सिडऑफ

@SteelBrain: आपके पास एक बिंदु है! मैंने उत्तर को प्रतिबिंबित करने के लिए अद्यतन किया है, हालांकि मुझे संदेह है कि मेरे पास था - शुरू में - उपयोग करने का एक कारणFunction.prototype.apply() , लेकिन मैं यह नहीं सोच सकता कि यह क्या था, या हो सकता है।
डेविड का कहना है कि

6
यह एक ऐसा फ़ंक्शन बनाने के लिए बेहतर है जो Numberऑब्जेक्ट को संशोधित नहीं करता है । यह एक एंटी-पैटर्न है और आपको आकर काट लेगा यदि ECMA मानकों में कोई Number.between()फ़ंक्शन शामिल होता है, या यदि कोई अन्य लाइब्रेरी या कोड का कोई अन्य कोड Number.prototype.betweenएक अलग परिभाषा के साथ कहीं और परिभाषित करता है। इसके बजाय, एक सहायक कार्य करें और इसका उपयोग करें!
मोनार्क वाडिया

2
@MonarchWadia जबकि आपकी बात समझ में आती है कि देशी वस्तुओं को संशोधित / विस्तारित करना बुरा व्यवहार है, मुझे लगता है कि यह थोड़ा बेमानी है कि यह हर जगह (कोई अपराध नहीं) है। मैं उस समय को नहीं गिन सकता जो मैंने देखा है "देशी वस्तुओं को संशोधित न करें"। मेरे लिए, यह किसी ऐसे व्यक्ति की तरह है जो घर के चाकू बेचने वाले को चेतावनी देता है कि वह हर बार चाकू के संभावित खतरों के बारे में चेतावनी दे जब वह किसी विक्रेता की ज़िम्मेदारी को बेच दे, यदि कोई नुकसान हो। खतरों को सामान्य ज्ञान होना चाहिए। यह उपयोगकर्ता पर निर्भर होना चाहिए कि वह उसकी उपेक्षा करता है या नहीं।
एककुरी

80

मैं एक अतिरिक्त संकेत देने के लिए चर को अंदर रखना पसंद करता हूं कि कोड मेरे चर को मान्य कर रहा है एक श्रेणी मानों के बीच है

if (500 < size && size < 600) { doStuff(); }

13
मुझे ये अदा पसंद है! अनुकूल होगा कि :)
काई

2
यह मेरी प्राथमिकता है, क्योंकि यह अजगर के min < testval < maxसिंटैक्स के करीब है
डेवेरुएनसेवरीथिंग

@GouravChawla क्या आप इस उत्तर में कोड स्निपेट उदाहरण के बारे में बात कर रहे हैं? मेरा कोड स्निपेट पायथन था, तुलना के लिए इस्तेमाल किया गया था
डेवेरिनसेवरीथिंग

@GouravChawla किसी ने अन्यथा नहीं कहा। यह स्पष्ट नहीं है कि आप किस बात से असहमत हैं।
डेवेरुइनेसवरी

28

यह एक पुराना सवाल है, हालांकि मेरे जैसे किसी के लिए उपयोगी हो सकता है।

lodashहै _.inRange()समारोह https://lodash.com/docs/4.17.4#inRange

उदाहरण:

_.inRange(3, 2, 4);
// => true

कृपया ध्यान दें कि यह विधि Lodashउपयोगिता पुस्तकालय का उपयोग करती है , और लॉडश के स्थापित संस्करण तक पहुंच की आवश्यकता होती है।


2
कृपया ध्यान रखें कि अंतिम मूल्य शामिल नहीं है। जैसे। _.inRange(10, 0, 10) // => false
लुसियो

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

2

आप ifलिखने के बजाय स्थिति में एकाधिक खंड का उपयोग कर सकते हैं

if (windowsize > 500-600) {
    // do this
}

क्योंकि यह वास्तव में कोई मतलब नहीं है तार्किक रूप से जावास्क्रिप्ट अगर आपकी स्थिति की तरह पढ़ेगा

windowSize > -100 

क्योंकि यह 500-600करने के लिए गणना करता है-100

आपको &&उदाहरण के लिए दोनों मामलों की सख्त जांच के लिए उपयोग करना चाहिए जो इस तरह दिखेंगे

if( windowSize > 500 && windowSize < 600 ){

// Then doo something

}

0

मैंने बूटस्ट्रैप मोडल मानों को दिखाने और छिपाने के लिए इस बिट jQuery को लागू किया है। अलग-अलग फ़ील्ड एक उपयोगकर्ता टेक्स्टबॉक्स प्रविष्टि के मूल्य सीमा के आधार पर प्रदर्शित किए जाते हैं।

$(document).ready(function () {
    jQuery.noConflict();
    var Ammount = document.getElementById('Ammount');

    $("#addtocart").click(function () {

            if ($(Ammount).val() >= 250 && $(Ammount).val() <= 499) {
                {
                    $('#myModal').modal();
                    $("#myModalLabelbronze").show();
                    $("#myModalLabelsilver").hide();
                    $("#myModalLabelgold").hide();
                    $("#myModalPbronze").show();
                    $("#myModalPSilver").hide();
                    $("#myModalPGold").hide();
                }
            }
    });

6
2013 में तुच्छ कार्यों के लिए jQuery का उपयोग करना शायद एक विकल्प था लेकिन आज नहीं है
mgamsjager

3
सच है, लेकिन मुझे डर है कि लोग आज भी इसका इस्तेमाल करेंगे
mgamsjager

1
जिज्ञासा से बाहर: क्यों jQuery अब से तुच्छ कार्यों के लिए उपयोग करने के लिए बदतर है?
जूलिक्स

2
@ जूलिक्स ज्यादातर प्रदर्शन, इस मामले में नगण्य है। सामान्य बिंदु यह होगा कि "jQuery का उपयोग न करें जब यह आवश्यक नहीं है" लेकिन ये टिप्पणियां बहस को शुरू करने (पुनः) करने के लिए जगह नहीं हैं। हालांकि इसके साथ मज़े :) :) i.stack.imgur.com/sGhaO.gif
Luca

यह सिर्फ समाधान का कार्यान्वयन है। ओपी के पास पहले से ही मूल्यों तक पहुंच है। तो jQuery $().val()अप्रासंगिक है और आवश्यक नहीं है। लेकिन फिर, प्रश्न के मूल संस्करण में, ओपी ने एक साधारण अंकगणितीय जांच के लिए jQuery का उल्लेख किया है। (आह) यह पहली गलती है।
एकिनुरी

0

यहाँ सबसे छोटी विधि संभव है:

if (Math.abs(v-550)<50) console.log('short')
if ((v-500)*(v-600)<0) console.log('short')

parametrized:

if (Math.abs(v-max+v-min)<max+min) console.log('short')
if ((v-min)*(v-max)<0) console.log('short')

आप दोनों पक्षों को 2 से विभाजित कर सकते हैं यदि आपको समझ में नहीं आता है कि पहले एक कैसे काम करता है;)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.