ฉันต้องการตรวจสอบว่าค่าอยู่ในช่วงที่ยอมรับหรือไม่ ถ้าใช่เพื่อทำอะไรบางอย่าง มิฉะนั้นอย่างอื่น
ช่วงคือ0.001-0.009
. ฉันรู้วิธีใช้หลายตัวif
เพื่อตรวจสอบสิ่งนี้ แต่ฉันต้องการทราบว่ามีวิธีใดในการตรวจสอบในif
คำสั่งเดียวหรือไม่
ฉันต้องการตรวจสอบว่าค่าอยู่ในช่วงที่ยอมรับหรือไม่ ถ้าใช่เพื่อทำอะไรบางอย่าง มิฉะนั้นอย่างอื่น
ช่วงคือ0.001-0.009
. ฉันรู้วิธีใช้หลายตัวif
เพื่อตรวจสอบสิ่งนี้ แต่ฉันต้องการทราบว่ามีวิธีใดในการตรวจสอบในif
คำสั่งเดียวหรือไม่
คำตอบ:
คุณกำลังถามคำถามเกี่ยวกับการเปรียบเทียบตัวเลขดังนั้นนิพจน์ทั่วไปจึงไม่เกี่ยวข้องกับปัญหานี้เลย คุณไม่จำเป็นต้องมีif
คำสั่ง " หลายรายการ" ในการทำเช่น:
if (x >= 0.001 && x <= 0.009) {
// something
}
คุณสามารถเขียนฟังก์ชัน "between ()" ให้ตัวเอง:
function between(x, min, max) {
return x >= min && x <= max;
}
// ...
if (between(x, 0.001, 0.009)) {
// something
}
นี่คือตัวเลือกที่มีเพียงการเปรียบเทียบเดียว
// return true if in range, otherwise false
function inRange(x, min, max) {
return ((x-min)*(x-max) <= 0);
}
console.log(inRange(5, 1, 10)); // true
console.log(inRange(-5, 1, 10)); // false
console.log(inRange(20, 1, 10)); // false
หากคุณต้องใช้ regexp (และจริงๆแล้วคุณไม่ควร!) สิ่งนี้จะใช้ได้:
/^0\.00([1-8]\d*|90*)$/
ควรทำงานเช่น
^
ไม่มีอะไรมาก่อน0.00
(nb: เครื่องหมายแบ็กสแลช Escape สำหรับ.
อักขระ)$
: ตามด้วยอะไรอื่นหากคุณใช้งานอยู่แล้วlodash
คุณสามารถใช้inRange()
ฟังก์ชัน:
https://lodash.com/docs/4.17.15#inRange
_.inRange(3, 2, 4);
// => true
_.inRange(4, 8);
// => true
_.inRange(4, 2);
// => false
_.inRange(2, 2);
// => false
_.inRange(1.2, 2);
// => true
_.inRange(5.2, 4);
// => false
_.inRange(-3, -2, -6);
// => true
ฉันชอบbetween
ฟังก์ชั่นของ Pointy ดังนั้นฉันจึงเขียนสิ่งที่คล้ายกันซึ่งใช้ได้ดีกับสถานการณ์ของฉัน
/**
* Checks if an integer is within ±x another integer.
* @param {int} op - The integer in question
* @param {int} target - The integer to compare to
* @param {int} range - the range ±
*/
function nearInt(op, target, range) {
return op < target + range && op > target - range;
}
ดังนั้นหากคุณต้องการดูว่าx
อยู่ในช่วง± 10 ของy
:
var x = 100;
var y = 115;
nearInt(x,y,10) = false
ฉันใช้มันเพื่อตรวจจับการกดบนมือถือแบบยาว:
//make sure they haven't moved too much during long press.
if (!nearInt(Last.x,Start.x,5) || !nearInt(Last.y, Start.y,5)) clearTimeout(t);
หากคุณต้องการให้รหัสของคุณเลือกช่วงของตัวเลขที่เฉพาะเจาะจงให้แน่ใจว่าได้ใช้&&
โอเปอเรเตอร์แทน||
.
if (x >= 4 && x <= 9) {
// do something
} else {
// do something else
}
// be sure not to do this
if (x >= 4 || x <= 9) {
// do something
} else {
// do something else
}
คุณต้องต้องการกำหนดขอบเขตล่างและบนก่อนที่จะเขียนเงื่อนไข
function between(value,first,last) {
let lower = Math.min(first,last) , upper = Math.max(first,last);
return value >= lower && value <= upper ;
}
&&
โอเปอเรเตอร์? ...