[英]Replace multiple if statements when checking for multiple integer ranges
我想通過移除所有這些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
檢查相同的變量,但是有沒有更簡單有效的解決方案?
謝謝
首先,在JavaScript中使用object
作為變量名不是很好。 我改用“ 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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.