javascript中if(a>b)的有效替代方案,用于检查变量范围

efficient alternative to if (a>b) in javascript for checking a variable range

本文关键字:方案 有效 用于 范围 变量 检查 if gt javascript      更新时间:2023-09-26

我希望标题不要太笼统,也不要有误导性。

var blah;
if(a > 10) blah = 'large';
if(a <= 10 && a > 5) blah = 'medium';
if(a <= 5 && a >= 0) blah = 'small';

难道没有一种更优雅、更简洁的方法来实现范围检查吗?

是,使用else子句:

var blah;
if(a > 10){
    blah = 'large';
}else if(a > 5){
    blah = 'medium';
}else if(a >= 0){
    blah = 'small';
}

由于您在每个语句中进行简单的赋值,因此使用三元表达式也可能很优雅,尽管许多人会认为这不太可读:

var blah =
  a > 10 ? 'large'  :
  a > 5  ? 'medium' :
  a >= 0 ? 'small'  :
  undefined; // May want to choose a better default value for a < 0

您可以使用ternary operators

var blah;
blah = a > 10 ? 'large' : (a > 5 ? 'medium' : 'small' ) ;

如果你有很多区间,你可以选择这样的东西:

var ranges = [[10, 'large'],
              [5, 'medium'],
              [0, 'small']];
function range(n) { 
    for (var i = 0; i < ranges.length; i++) { 
        if (n > ranges[i][0]) {
            return ranges[i][1]; 
        }
    }
    return 'default value';
}

这并没有那么灵活,因为你不能为每种情况指定是使用<还是<=,但如果我有很多范围,我可能会写这样的东西。其他的答案都很好,我只是想把这个作为一个想法来添加。

如果范围是常量,则可以使用switch语句和modulo。例如

var blah;
switch(a-(a % 5)) {
    case 10:
        blah = 'large';
        break;
    case 5:
        blah = 'medium';
        break;
    case 0:
        blah = 'small';
        break;
    default:
        blah = 'large';
}

当然,只有当每个范围之间的差异相等时,才能使用它。