检查一个值是否在一个范围内的优雅方法,如果它超出范围,则设置它的值?

Asc*_*iom 5 javascript coding-style

我想做的事情本身就很简单,但我想知道是否有一些非常简洁的方法来完成同样的事情.

我有一个浮点变量,我想检查它的值是否在0和1之间.如果它小于0我想将它设置为零,如果它大于1我想将它设置为1.

通常我会这样做:

// var myVar is set before by some calculation

if(myVar > 1){
    myVar = 1;
}
if(myVar < 0){ 
    myVar = 0;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道更优雅/紧凑的方式吗?

Mic*_*uda 8

一种可能的方案:

myVar = Math.min(1, Math.max(0, myVar));
Run Code Online (Sandbox Code Playgroud)

另一个:

myVar = myVar < 0 ? 0 : myVar > 1 ? 1 : myVar;
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用三元,至少支持其他条件 - 一行中的多个三元组非常快速地混乱 (2认同)

Lou*_*cci 6

使用Math.min和Math.max,避免出现条件.

var MAX = 100;
var MIN = 50;

var val = 75;
console.log( Math.max(MIN, Math.min(MAX, val)) );

var val = 49;
console.log( Math.max(MIN, Math.min(MAX, val)) );

var val = 101;
console.log( Math.max(MIN, Math.min(MAX, val)) );
Run Code Online (Sandbox Code Playgroud)


pha*_*t0m 4

虽然最小/最大解决方案非常简洁,但发生的情况却远非显而易见。

我会选择一个可以完成您所拥有的功能的函数:

myVar = constrainToRange(myVar, 0, 1);

function constrainToRange(x, min, max) {
    if (x < min) {
        x = min;
    }
    else if( x > max) {
        x = max;
    }
    return x;
}
Run Code Online (Sandbox Code Playgroud)