2012-10-09 45 views
6

一系列這是我結帳看到一個數字是不是在一個範圍(在兩者之間的其他數字):最短的代碼,如果一個數字是在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 

我必須這樣做數學在我的代碼很多,我正在尋找更短的等效代碼。

這是一個較短的版本,我想出了。但我相信它可以變得更短:

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

但缺點是我不得不重複xy

+0

@NullUserException:這是否意味着'0'在區間'1 - 2'? – Bergi

+0

@Bergi Derp。 OP,那是非常錯誤的。 – NullUserException

+0

您的較短版本是錯誤的http://jsfiddle.net/Fm39z/ – ajax333221

回答

2

如果我不得不這樣做了很多,我只是寫一個函數inRange(a, b, x)所以在我需要的時候會是一個簡短的函數調用。通過這種方式,您還可以使功能體略微模糊化,而不必擔心它的長度。

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/

請注意,你需要圍繞數字文字中括號,或者解釋會認爲你的財產是一個小數點和炸燬。

+1

...或雙點,如果我記得正確。 –

+0

很明顯,只有按照正確的順序傳遞數字,這纔會起作用。 – NullUserException

+1

@NullUserException:你可以很容易地用'if(max Bergi

0

如果您需要靈活地測試一個號兩個數字之間屬於不首先發現的最小和最大:

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

測試從低到高:

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

測試前高後低:

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

我編輯了上面的代碼,因爲它不能很好地排序。 這是對我工作完美(包括範圍的結束):

var isNumberInRange = (num1, num2, testNum) => { 
    var min, max; 
    [min, max] = [num1, num2].sort((a, b) => a - b); 
    return (testNum >= min && testNum <= max); 
}; 
相關問題