如何检查数字是否介于两个值之间?

Dyc*_*yck 125 javascript

在JavaScript中,如果窗口大小超过500px,我告诉浏览器执行某些操作.我是这样做的:

if (windowsize > 500) {
    // do this
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但我想应用同样的方法,但有一系列数字.所以如果窗口大小介于500和600px之间,我想告诉我的浏览器.我知道这不会奏效,但这就是我想象的方式.

if (windowsize > 500-600) {
    // do this
}
Run Code Online (Sandbox Code Playgroud)

这在JavaScript中是否可行?

und*_*ned 206

测试是否windowsize大于500和小于600意味着这两个值500或其600本身都不会导致条件变为真.

if (windowsize > 500 && windowsize < 600) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,当`windowsize`至少为501px且最多为599px时,这种情况才有效.**不包括500px和600px.**如果要包含这些值,请为比较添加相等性. (7认同)
  • 只是一个细节,但通过以下方式更具可读性:`if(500 <windowsize && windowsize <600)` (3认同)

Dav*_*mas 104

我有一个时刻,所以,虽然你已经接受了答案,但我认为我会贡献以下内容:

Number.prototype.between = function(a, b) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

或者,如果您希望选择检查数字是否在定义的范围内,包括终点:

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return inclusive ? this >= min && this <= max : this > min && this < max;
};

var windowSize = 500;

console.log(windowSize.between(500, 603, true));
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

编辑为上述内容添加了一个小修正案,因为 - 如评论中所述 -

...... Function.prototype.apply()很慢!除了在你有一定数量的论据时调用它是没有意义的......

值得删除使用Function.prototype.apply(),产生上述方法的修正版本,首先没有'包容性'选项:

Number.prototype.between = function(a, b) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return this > min && this < max;
};

var windowSize = 550;

console.log(windowSize.between(500, 600));
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

并且具有"包容性"选项:

Number.prototype.between = function(a, b, inclusive) {
  var min = Math.min(a, b),
    max = Math.max(a, b);

  return inclusive ? this >= min && this <= max : this > min && this < max;
}

var windowSize = 500;

console.log(windowSize.between(500, 603, true));
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

参考文献:

  • 为什么使用apply而不是直接调用`Main.min(a,b)`?Function.prototype.apply很慢!除了在有固定数量的参数时调用它是没有意义的. (6认同)
  • 创建一个不修改`Number`对象的函数会更好.这是一个反模式,如果ECMA标准改为包含`Number.between()`函数,或者如果另一个库或另一段代码在其他地方用不同的定义定义`Number.prototype.between`,那么它会引起你的反感.相反,做一个帮助函数并使用它! (6认同)
  • @MonarchWadia虽然您的观点是修改/扩展本机对象是不正确的做法,但我觉得到处都讲这是多余的(没有冒犯)。我无法计数看到“不修改本机对象”的次数。对我来说,这就像卖家用刀的人警告买方,每当他/她出售一种刀时,可能会警告刀子,这有如卖方的责任,如果有任何伤害。危险应该是常识。用户是否忽略它们应该由用户决定。 (2认同)

Dav*_*vid 70

我更喜欢将变量放在内部以提供额外的提示,即代码验证我的变量在范围值之间

if (500 < size && size < 600) { doStuff(); }
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种风格!会适应:) (10认同)
  • 这是我的偏好,因为它更接近python的`min <testval <max`语法 (2认同)

ant*_*kiy 23

这是一个老问题,但对像我这样的人可能有用.

lodash_.inRange()功能https://lodash.com/docs/4.17.4#inRange

例:

_.inRange(3, 2, 4);
// => true
Run Code Online (Sandbox Code Playgroud)

  • 请注意,不包括最终值。例如。`_.inRange(10,0,10)// =&gt;否 (2认同)

小智 6

你可以简单地做到

if (windowsize > 500 && windowsize < 600) {
//your logic
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要干净的代码,您可以在任何常见位置的主 js 文件中编写自己的函数。

Number.prototype.between = function(a, b) {
 var min = Math.min.apply(Math, [a, b]),
    max = Math.max.apply(Math, [a, b]);
  return this > min && this < max;
};
Run Code Online (Sandbox Code Playgroud)

然后你可以这样称呼它

if(windowsize.between(500, 600)){
 //your logic
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我知道有一个公认的答案,但我想提供一些在某些情况下有用的方法。如果我们想检查是否nx和 之间y,我们可以这样做:

x <= n && n <= y
(x - n) * (y - n) <= 0
Run Code Online (Sandbox Code Playgroud)

当您尝试获得相同的结果(即使交换x和 )时,第二个非常有用y


小智 5

这是一个通用方法,你可以在任何地方使用

const isBetween = (num1,num2,value) => value > num1 && value < num2 
Run Code Online (Sandbox Code Playgroud)