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

时间:2012-10-12 12:59:50

标签: javascript coding-style

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

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

通常我会这样做:

// var myVar is set before by some calculation

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

有没有人知道更优雅/更紧凑的方式呢?

5 个答案:

答案 0 :(得分:8)

一种可能的解决方案:

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

另:

myVar = myVar < 0 ? 0 : myVar > 1 ? 1 : myVar;

答案 1 :(得分: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)) );

答案 2 :(得分: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;
}

答案 3 :(得分:1)

这是一个可以非常容易地扩展的选项,可以测试超过简单的最小/最大值:

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

parseFloat并将0作为字符串返回非常重要,否则当它应该停在那里时会掉落。

答案 4 :(得分:0)

也许这个:

 myVal = myVal >= 1 ? 1 : Math.min(Math.abs(myVal), 0)