如何使用JavaScript限制最小/最大值之间的数字?

Ale*_*dra 60 javascript integer numbers

我想限制两个值之间的数字,我知道在PHP中你可以这样做:

$number = min(max(intval($number), 1), 20);
// this will make $number 1 if it's lower than 1, and 20 if it's higher than 20
Run Code Online (Sandbox Code Playgroud)

如何在javascript中执行此操作,而不必编写多个if语句和类似的东西?谢谢.

Gov*_*iya 114

像这样

var number = Math.min(Math.max(parseInt(number), 1), 20);
Run Code Online (Sandbox Code Playgroud)

  • 除非你知道自己在做什么,否则不要使用`parseInt`,例如`parseInt(1e300)=== 1`.只需使用`Math.min(Math.max(number,1),20)`. (5认同)
  • 现在我们的答案是相同的,所以我正在删除我的. (2认同)
  • @Sandwich记住,“Math.min”和“Math.max”**不是**“Math.setMinimumLimit”和“Math.setMaximumLimit”。别混淆了。 (2认同)

T.J*_*der 10

您至少有两个选择:

您可以使用一对条件运算符(? :):

number = number > 100 ? 100 : number < 0 ? 0 : number;
Run Code Online (Sandbox Code Playgroud)

或者你也可以结合Math.maxMath.min:

number = Math.min(100, Math.max(0, number));
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,相对容易混淆自己,所以如果你在多个地方这样做,你可能会考虑使用效用函数:

function clamp(val, min, max) {
    return val > max ? max : val < min ? min : val;
}
Run Code Online (Sandbox Code Playgroud)

然后:

number = clamp(number, 0, 100);
Run Code Online (Sandbox Code Playgroud)


Neu*_*ron 8

无需进一步解释:

function clamp(value, min, max) {
    return Math.min(Math.max(value, min), max);
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*ijn 7

使用lodash的钳位方法:

_.clamp(22, 1, 20) // Outputs 20


Raf*_*afe 5

相关:将数字限制为段的最优雅方法是什么?

ECMAScript 2017 更新:

Math.clamp(x, lower, upper)

但请注意,截至今天,这是第 1 阶段提案。在它得到广泛支持之前,您可以使用polyfill