这是我结帐以查看某个数字是否在一个范围内(在两个其他数字之间):
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
但缺点是我必须重复x
或y
答案 0 :(得分:22)
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/
请注意,您需要在parens中包围数字文字,否则解释程序会认为您的属性是小数点并且会爆炸。
答案 1 :(得分:2)
如果我必须这么做,我只需编写一个函数inRange(a, b, x)
,这样在我需要的时候它就是一个简短的函数调用。这样你也可以使函数体稍微不那么模糊,而不用担心它的长度。
答案 2 :(得分: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
答案 3 :(得分:0)
我编辑了上面的代码,因为它没有很好地排序。 这对我来说非常有用(包括范围结束):
var isNumberInRange = (num1, num2, testNum) => {
var min, max;
[min, max] = [num1, num2].sort((a, b) => a - b);
return (testNum >= min && testNum <= max);
};