2012-10-09 40 views
6

Đây là cách tôi kiểm tra để xem nếu một số là trong một phạm vi (ở giữa hai con số khác):mã ngắn nhất để kiểm tra xem một số là trong một phạm vi trong JavaScript

var a = 10, 
    b = 30, 
    x = 15, 
    y = 35; 

x < Math.max(a,b) && x > Math.min(a,b) // -> true 
y < Math.max(a,b) && y > Math.min(a,b) // -> false 

tôi phải làm điều này toán trong mã của tôi rất nhiều và tôi đang tìm kiếm mã tương đương ngắn hơn.

Đây là phiên bản ngắn hơn mà tôi đã đưa ra. Nhưng tôi chắc chắn nó có thể nhận được ngắn hơn nhiều:

a < x && x < b 
true 
a < y && y < b 
false 

Nhưng nhược điểm là tôi phải lặp lại x hoặc y

+0

@NullUserException: Điều đó ngụ ý rằng '0' là trong khoảng' 1 - 2'? – Bergi

+0

@Bergi Derp. OP, điều đó rất sai. – NullUserException

+0

phiên bản ngắn hơn của bạn là sai http://jsfiddle.net/Fm39z/ – ajax333221

Trả lời

2

Nếu tôi có để làm điều này rất nhiều, tôi chỉ muốn viết một hàm inRange(a, b, x) nên nó sẽ là một cuộc gọi hàm ngắn bất cứ lúc nào tôi cần nó. Bằng cách này bạn cũng có thể làm cho cơ thể chức năng hơi bớt xáo trộn mà không lo lắng về độ dài của nó.

20
Number.prototype.between = function (min, max) { 
    return this > min && this < max; 
}; 

if ((5).between(4, 6)) { 
    alert('worked!'); 
} 

var num = 6; 
if (num.between(5, 7)) { 
    alert('still worked!'); 
} 

http://jsfiddle.net/jbabey/4jjRm/1/

Lưu ý rằng bạn cần phải bao quanh chữ số trong ngoặc, hoặc người phiên dịch sẽ nghĩ bất động sản của bạn là một dấu thập phân và thổi lên.

+1

... hoặc tăng gấp đôi dấu chấm, nếu tôi nhớ chính xác. –

+0

Rõ ràng điều này sẽ chỉ hoạt động nếu bạn chuyển các số theo đúng thứ tự. – NullUserException

+1

@NullUserException: Bạn có thể dễ dàng thêm rằng với dòng 'if (max Bergi

0

Nếu bạn cần sự linh hoạt để kiểm tra xem một số rơi giữa hai con số mà không cần tìm kiếm tối thiểu và tối đa:

let inRange = (num1, num2, numTest) => { 
    [min, max] = [num1, num2].sort((a, b) => a > b); 
    return numTest > min && numTest < max; 
} 

Testing từ thấp đến cao:

inRange(1, 5, 3); // true 
inRange(1, 5, 6); // false 

kiểm tra từ cao xuống thấp:

inRange(5, 1, 3); // true 
inRange(5, 1, 6); // false 
0

Tôi đã chỉnh sửa mã từ trên cao, vì nó không sắp xếp tốt. Đây là những gì làm việc cho tôi một cách hoàn hảo (bao gồm phạm vi kết thúc):

var isNumberInRange = (num1, num2, testNum) => { 
    var min, max; 
    [min, max] = [num1, num2].sort((a, b) => a - b); 
    return (testNum >= min && testNum <= max); 
}; 
Các vấn đề liên quan