2013-03-31 104 views
0

我對JavaScript有點新,我只是想知道這是否可能。如何從返回的方法優化if語句布爾值

考慮一下:

if(foo('1')){ 
    // do something 
} 
else if(foo('2')){ 
    // do something else 
} 
else if(foo('3')){ 
    // do something different 
} 
else if(foo('4')){ 
    // do something completely different 
} 
... 
else if(foo(n)){ 
    ... 
} 

foo(stringValue)是返回的方法無論是truefalse但美中不足的是,我不能以任何方式改變該方法(例如改變的返回值)。現在,如果我想重構代碼,我可能會將所有foo參數值放入一個集合中,爲if語句中的每個獨特操作創建一個方法,遍歷所有參數值並在每次foo(n )迴歸真實,但這似乎是一個非常醜陋的做法。是否有更好的方式來實現這個使用switch語句?

+0

字符串參數是'foo'唯一的獨立變量嗎?或者,foo('1')能得出多個不同的結果嗎? –

+0

嗨本,我不知道我是否正確理解你的問題。我沒有在任何if語句中調用foo。你能否詳細說明你的評論? –

+0

有一種使用'switch'語句的方法(參見Juhana的回答),但我認爲這不一定更好。你的代碼有什麼問題? – Bergi

回答

1

有這一招,如果你想使用switch語句(不知道它實際上更好),可以使用:

switch(true) { 
    case foo('1'): 
     // do something 
     break; 
    case foo('2'): 
     // and so on 
     break; 
    default: 
     // all returned false 
} 
+0

同意其實際上是同樣的事情。 –

+0

不要忘了'break;':-) – Bergi

+0

@Bergi我從OP的知道如何知道switch語句是如何工作的問題中推斷出來的,但好點,無論如何我都會加上它們。 – JJJ

1

我寧願這樣。只需將處理代碼中的檢查代碼分開即可。

var array = ["1", "2", "3", "4"]; 
var iLength = array.length; 
for(var i= 0; i < iLength ;i++) 
{ 
    var strValue = array[i]; 
    if(foo(strValue)) 
    { 
     break; 
    } 
} 

switch(strValue) 
{ 
    case array[0]: 
    //perform operations here for case "1" 
    break; 
    case array[1]: 
    //perform operations here for case "2" 
    break; 
} 
+0

這與我想象的非常相似。在我寫給Juhana的時候,仍然有一部分不得不用switch語句寫出所有的情況。順便提一下,感謝您提供替代解決方案! –