我想通过删除所有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
检查同一个变量,但是有一个更简单,更有效的[特别是性能]解决方案吗?
由于
答案 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;
}
}