[英]Any way to simplify long if else statement with < in conditions?
我有以下部分代碼,我不太喜歡:
if (a < 2){
b = 'somethingX';
} else if (a < 4){
b = 'somethingY';
} else if (a < 6){
....;
} else {
b = 'somethingZ';
}
我有(a < SomeNumber)
20個這樣的if else語句,它們全部由(a < SomeNumber)
條件組成。 結果,我分配給b
罐不是一個功能a
和a < someNumber
是不以規則的間隔。 我想簡化它們,但無法提出適當的解決方案。
如果我有(a === SomeNumber)
我可以通過創建一個對象並訪問該對象的值( 類似於this ) 來輕松實現此目的,但是在這里我有<號。 有什么辦法嗎?
PS請不要建議更改此設置以進行切換。 我想使它更易於閱讀,並且基於我的主觀意見,閱讀switch
處於與if else
水平相同的水平。
PS2人們問這種邏輯的原因。 基本上,我有一個瘦客戶機,該客戶機返回錯誤消息的代碼。 他們以某種特定方式分組。 例如,從1到8的所有內容都是因為用戶存在問題。 從9到21,因為密鑰不正確。 有時我不需要通知用戶確切的消息,因此由於分組的原因,我只能告訴一般消息。 為什么我的服務器沒有發送消息? 它越細越好,因此發送7比發送大字符串更好。
最好的處理方法是使用帶有步驟和相關值的數組。 您還需要一個默認值:
var default = 'aValue';
var steps = [2, 'something', 6, 'anotherThing', 8, 'this', 10, 'that', ... ];
然后定義一個使用該數組的函數
function findSmallestMatch(val, default, steps) {
for (var i=0; i<steps.length; i+=2) if (val<steps[i]) return steps[i+1];
return default;
}
搭配使用:
var res = findSmallestMatch ( 5, default, steps ); // returns 'anotherThing
編輯:如果您知道輸入是“合理”范圍內的正整數,則可以使用以下值預先填充地圖:
var default = 'aValue';
var steps = [2, 'something', 6, 'anotherThing', 8, 'this', 10, 'that', ... ];
var matchMap = [];
for (var i=0; i<maximumValue; i+=1)
matchMap[i] = findSmallestMatch(i, default, steps);
以后,您可以簡單地使用:
var res = matchMap[value];
您可以執行以下操作:
var data = [[2, 'somethingX'], [4, 'somethingY'], ......];
var b = 'somethingZ'; // default value
for (var i=0; i < data.length; i++) {
if (a < data[i][0]) {
b = data[i][1];
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.