检查多个整数范围时,替换多个if语句

时间:2014-10-29 10:07:13

标签: javascript if-statement switch-statement

我想通过删除所有if statements来简化此代码,如果可能的话,可以使用单个函数和/或可以用来移除那些(如果是重复的)的所有内容。

我需要检查多个整数范围,根据用户评分我需要设置两个变量。

这是我的代码:

if (userScore <= 40)
{
    object.setMinValue(0);
    object.setMaxValue(40);
}

if (userScore > 40 && userScore <= 65)
{
    object.setMinValue(41);
    object.setMaxValue(65);
}

if (userScore > 65 && userScore <= 85)
{
    object.setMinValue(66);
    object.setMaxValue(85);
}

if (userScore > 85 && userScore <= 95)
{
    object.setMinValue(86);
    object.setMaxValue(95);
}

if (userScore > 95 && userScore <= 100)
{
    object.setMinValue(96);
    object.setMaxValue(100);
}

我认为可以使用switch语句,因为有许多if statements检查同一个变量,但是有一个更简单,更有效的[特别是性能]解决方案吗?

由于

1 个答案:

答案 0 :(得分:2)

首先,在javascript中使用object作为变量名称并不是很好。我正在使用&#39; o&#39;代替。 正如我可以从您的代码中找到的,代码块中的值可以从条件语句中派生出来:

var scoreLimits = [0,40,65,85,95,100];

for(var i = 1; i < scoreLimits.length; i++)
{
    var limit = scoreLimits[i];
    if ( userScore <= limit )
    {
        o.setMinValue(scoreLimits[i-1]);
        o.setMaxValue(limit);
        break;
    }
}

这是一个工作示例: http://jsfiddle.net/xsasjs6t/

如果您希望它运行得非常快,您可以预先计算整个可能的userScore值范围的地图,并在以后使用它:

var mapper = {};
for(var i = 0; i < scoreLimits.length - 1; i++)
{
    var limits = { minValue : scoreLimits[i], maxValue : scoreLimits[i+1] };
    for (var j = scoreLimits[i] + 1; j <= scoreLimits[i + 1]; j++)
    {
        mapper[j] = limits;
    }
}

工作示例: http://jsfiddle.net/8cqwp4fz/