5

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

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

通常我这样做:

// var myVar is set before by some calculation

if(myVar > 1){
    myVar = 1;
}
if(myVar < 0){ 
    myVar = 0;
}

有谁知道这样做的更优雅/紧凑的方式?

4

5 回答 5

8

一种可能的解决方案:

myVar = Math.min(1, Math.max(0, myVar));

其他:

myVar = myVar < 0 ? 0 : myVar > 1 ? 1 : myVar;
于 2012-10-12T13:02:43.990 回答
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)) );
于 2012-10-12T13:01:31.790 回答
4

虽然 Min/Max 解决方案非常简洁,但远非显而易见。

我会选择一个功能正是你所拥有的:

myVar = constrainToRange(myVar, 0, 1);

function constrainToRange(x, min, max) {
    if (x < min) {
        x = min;
    }
    else if( x > max) {
        x = max;
    }
    return x;
}
于 2012-10-12T13:18:40.493 回答
1

这是一个可以很容易地扩展以测试比简单的最小值/最大值更多的选项:

myVar = parseFloat( (myVar < 0 && '0') || (myVar > 1 && 1) || myVar );

parseFloat返回 0 作为字符串很重要,否则当它应该停在那里时,它会通过那个条件。

于 2012-10-12T13:01:54.350 回答
0

也许是这样:

 myVal = myVal >= 1 ? 1 : Math.min(Math.abs(myVal), 0)
于 2012-10-12T13:07:52.990 回答