2014-10-29 48 views
0

我想通过删除所有那些if statements来简化此代码,如果可能的话,单个函数和/或可用于删除这些元素的所有内容(如果有的话)。当检查多个整数范围时,替换多个if语句

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

这是我的代码:

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来检查同一个变量,但有一个更简单,更有效的[性能expecially]解?

感谢

+0

http://stackoverflow.com/questions/2696436/switch-case-in-jquery – sasi 2014-10-29 10:16:49

+0

switch语句不能在这里使用,因为你有范围,而不是固定值。 – 2014-10-29 10:23:24

回答

2

首先,这不是很好的使用object在javascript中的变量名。我使用'o'代替。 我可以从你的代码搞清楚,在代码块的值可以从条件语句中得到:

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/

+0

你好乔治,在我原来的代码中,我没有使用“对象”,而是使用其他变量名,但发布了我用它替换的问题。感谢您的回答 :-) – Aluminum 2014-10-29 10:18:35