6

这就是我检查一个数字是否在一个范围内(在其他两个数字之间)的方式:

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

4

4 回答 4

23
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/

请注意,您需要在括号中包含数字文字,否则解释器会认为您的属性是小数点并爆炸。

于 2012-10-09T18:42:56.457 回答
2

如果我必须经常这样做,我只需编写一个函数inRange(a, b, x),这样在我需要的任何时候它都会是一个简短的函数调用。这样,您还可以使函数体的混淆程度稍低,而不必担心其长度。

于 2012-10-09T18:42:23.483 回答
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
于 2017-03-24T14:53:25.723 回答
0

我从上面编辑了代码,因为它不能很好地排序。这对我来说非常有效(包括范围结束):

var isNumberInRange = (num1, num2, testNum) => {
  var min, max;
  [min, max] = [num1, num2].sort((a, b) => a - b);
  return (testNum >= min && testNum <= max);
}; 
于 2017-09-18T12:02:52.557 回答