簡體   English   中英

有什么方法可以簡化條件中用<的長if語句?

[英]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罐不是一個功能aa < 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM