จะตรวจสอบว่าตัวเลขอยู่ระหว่างสองค่าได้อย่างไร?


144

ในจาวาสคริปต์ฉันบอกให้เบราว์เซอร์ทำอะไรบางอย่างถ้าขนาดหน้าต่างใหญ่กว่า 500px ฉันทำเช่นนั้น:

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

วิธีนี้ใช้งานได้ดี แต่ฉันต้องการใช้วิธีเดียวกันนี้ แต่ใช้ตัวเลขจำนวนหนึ่ง ดังนั้นฉันอยากจะบอกให้เบราว์เซอร์ของฉันทำสิ่งต่าง ๆ ถ้าขนาดหน้าต่างอยู่ระหว่าง 500px ถึง 600px ฉันรู้ว่ามันใช้งานไม่ได้ แต่นี่เป็นวิธีที่ฉันจินตนาการ:

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

สิ่งนี้เป็นไปได้ไหมภายใน JavaScript?


9
ดูเหมือนว่าจะรุนแรงเล็กน้อยเพื่อปิดคำถามนี้ ฉันสามารถโหวตให้เปิดใหม่ได้ไหม มันเขียนดีและให้รหัสตัวอย่าง
Caltor

แน่นอนการตรวจสอบที่ถูกต้องมากขึ้นจะเป็นถ้า (windowsize> = 500 && windowsize <= 600) หรือถ้า (! (windowsize <500 || windowsize> 600))
SPlatten

คำตอบ:


225

ทดสอบว่าwindowsizeมีค่ามากกว่า500และน้อยกว่า600ความหมายที่ว่าค่า500หรือ600ตัวมันเองจะไม่ส่งผลให้สภาพเป็นจริง

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

1
ขอบคุณไม่ได้กำหนดเพียงเพื่อยืนยันสิ่งนี้จะทำสิ่งที่ฉันต้องการภายในเบราว์เซอร์เมื่อขนาดหน้าต่างใหญ่กว่า 500px และน้อยกว่า 600px ทำงานเป็นหลักในช่วง 500-600px เท่านั้นใช่ไหม? (ฉันไม่ดีกับสิ่งนี้ lol)
Dyck

1
@Dyck ใช่มันทำเช่นนั้น :) โปรดทราบว่า jQuery เป็นเพียงไลบรารี JavaScript
ไม่ได้กำหนด

7
โปรดทราบว่าเงื่อนไขนี้เป็นจริงเมื่อwindowsizeอย่างน้อย 501px และสูงสุด 599px ไม่รวม 500px และ 600px เพิ่มความเท่าเทียมกันให้กับการเปรียบเทียบหากคุณต้องการรวมค่าเหล่านี้
Robert Koritnik

3
เพียงรายละเอียด แต่สามารถอ่านได้มากขึ้นด้วยวิธีต่อไปนี้:if(500 < windowsize && windowsize < 600)
Giovanni Benussi

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));

สาธิต JS ซอ

หรือหากคุณต้องการให้ตัวเลือกในการตรวจสอบตัวเลขอยู่ในช่วงที่กำหนดรวมถึงจุดสิ้นสุด :

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));

สาธิต JS ซอ

แก้ไขเพื่อเพิ่มการแก้ไขเล็กน้อยด้านบนระบุว่า - ดังที่ระบุไว้ในความคิดเห็น -

... 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));

สาธิต JS ซอ

และด้วยตัวเลือก 'รวม':

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));

สาธิต JS ซอ

อ้างอิง:


6
ทำไมใช้ใช้แทนการโทรโดยตรงเช่นMain.min(a,b)? Function.prototype.apply ช้า! นอกจากนี้เรียกมันว่าเมื่อคุณมีจำนวนอาร์กิวเมนต์คงที่ไม่มีจุดหมาย
Steel Brain

ฉันจะเพิ่มลงในกล่องเครื่องมือเริ่มต้นของฉัน - มีประโยชน์มากและขอบคุณสำหรับการมีส่วนร่วมนี้!
SidOfc

@SteelBrain: คุณมีจุด! ฉันได้อัปเดตคำตอบเพื่อสะท้อนถึงสิ่งนั้นแล้ว แต่ฉันสงสัยว่าฉันมี - ตอนแรก - เหตุผลในการใช้Function.prototype.apply()แต่ฉันไม่สามารถคิดได้ว่ามันคืออะไรหรืออาจจะเป็น
เดวิดบอกว่าคืนสถานะโมนิก้า

6
มันดีกว่ามากในการสร้างฟังก์ชั่นที่ไม่ได้แก้ไขNumberวัตถุ นี่เป็นรูปแบบการต่อต้านและจะมากัดคุณหากมาตรฐาน ECMA เปลี่ยนไปรวมNumber.between()ฟังก์ชั่นหรือหากห้องสมุดอื่นหรือรหัสNumber.prototype.betweenอื่นกำหนดไว้ที่อื่นด้วยคำจำกัดความที่แตกต่างกัน ให้ใช้ฟังก์ชันผู้ช่วยแทนและใช้สิ่งนั้น!
ราชาวดี Wadia

2
@MonarchWadia ในขณะที่จุดของคุณทำให้รู้สึกว่าการปรับเปลี่ยน / ขยายวัตถุพื้นเมืองคือการปฏิบัติที่ไม่ดีฉันรู้สึกว่ามันซ้ำซ้อนเล็กน้อยกับการเทศนานี้ทุกที่ (ไม่มีความผิด) ฉันไม่สามารถนับจำนวนครั้งที่ฉันเห็น "ไม่แก้ไขวัตถุดั้งเดิม" สำหรับฉันมันเหมือนมีคนขายมีดในครัวเรือนเตือนผู้ซื้อเกี่ยวกับอันตรายที่อาจเกิดขึ้นจากมีดทุกครั้งที่เขา / เธอขายหนึ่งเหมือนความรับผิดชอบของผู้ขายถ้ามีอันตรายใด ๆ อันตรายควรเป็นความรู้ทั่วไป ควรขึ้นอยู่กับผู้ใช้ว่าเขา / เธอไม่สนใจพวกเขาหรือไม่
akinuri

80

ฉันต้องการวางตัวแปรไว้ด้านในเพื่อให้คำแนะนำเพิ่มเติมว่ารหัสกำลังตรวจสอบตัวแปรของฉันอยู่ระหว่างค่าช่วง

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

13
ฉันชอบสไตล์นี้! จะปรับตัว :) :)
Kaii

2
นี่เป็นสิ่งที่ฉันชอบเนื่องจากใกล้เคียงกับmin < testval < maxไวยากรณ์ของ python
daveruinsevery ทุกอย่าง

@GouravChawla คุณกำลังพูดถึงตัวอย่างโค้ดในคำตอบนี้หรือไม่? ข้อมูลโค้ดของฉันคือ Python ใช้สำหรับการเปรียบเทียบ
daveruinseverything

@GouravChawla ไม่มีใครพูดเป็นอย่างอื่น มันไม่ชัดเจนในสิ่งที่คุณไม่เห็นด้วย
daveruinsevery ทุก

28

เป็นคำถามเก่า แต่อาจมีประโยชน์สำหรับคนอย่างฉัน

lodashมี_.inRange()ฟังก์ชั่นhttps://lodash.com/docs/4.17.4#inRange

ตัวอย่าง:

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

โปรดทราบว่าวิธีนี้ใช้ประโยชน์จากLodashยูทิลิตี้ไลบรารี่และต้องการการเข้าถึง Lodash เวอร์ชันที่ติดตั้ง


2
โปรดระวังมากกว่าค่าสิ้นสุดไม่รวม เช่น. _.inRange(10, 0, 10) // => false
Lucio

เนื่องจาก OP จำกัด ขอบเขตคำถามJavascriptไว้จึงน่าสังเกตว่าวิธีการนี้ใช้ประโยชน์จากLodashยูทิลิตี้ไลบรารีและต้องการการเข้าถึง Lodash เวอร์ชันที่ติดตั้งไว้
Chaya Cooper

2

คุณสามารถใช้เงื่อนไขหลายข้อได้ifแทนที่จะเขียน

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

เพราะสิ่งนี้ไม่มีเหตุผลที่สมเหตุสมผล JavaScript จะอ่านเงื่อนไขของคุณหากต้องการ

windowSize > -100 

เพราะมันจะคำนวณ500-600การ-100

คุณควรใช้&&สำหรับการตรวจสอบอย่างเข้มงวดทั้งสองกรณีซึ่งจะมีลักษณะเช่นนี้

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

// Then doo something

}

0

ฉันเพิ่งใช้ jQuery นี้เพื่อแสดงและซ่อนค่า mod bootstrap ฟิลด์ต่าง ๆ จะแสดงตามช่วงค่าของรายการกล่องข้อความของผู้ใช้

$(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
การใช้ jQuery สำหรับฟังก์ชั่นเล็กน้อยในปี 2556 อาจเป็นตัวเลือก แต่ไม่ใช่ในวันนี้
mgamsjager

3
จริง แต่ฉันกลัวว่าผู้คนจะยังคงใช้มันในวันนี้
mgamsjager

1
จากความอยากรู้: ทำไม jQuery ถึงใช้งานฟังก์ชั่นเล็ก ๆ น้อย ๆ ได้มากกว่าตอนนี้?
Julix

2
@Julix ส่วนใหญ่มีผลการดำเนินงานแม้ว่าจะเล็กน้อยในกรณีนี้ ประเด็นทั่วไปคือ "ไม่ใช้ jQuery เมื่อไม่จำเป็น" แต่ความคิดเห็นเหล่านี้ไม่ใช่ที่สำหรับเริ่มการอภิปราย ขอให้สนุกกับเรื่องนี้ :) i.stack.imgur.com/sGhaO.gif
Luca

นี่เป็นเพียงการใช้งานโซลูชัน OP มีการเข้าถึงค่าแล้ว ดังนั้น jQuery $().val()จึงไม่เกี่ยวข้องและไม่จำเป็น แต่อีกครั้งในเวอร์ชันดั้งเดิมของคำถาม OP กล่าวถึง jQuery สำหรับการตรวจสอบทางคณิตศาสตร์อย่างง่าย (ถอนหายใจ) นั่นเป็นความผิดพลาดครั้งแรก
akinuri

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 ถ้าคุณไม่เข้าใจว่าอันแรกทำงานอย่างไร)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.