2013-03-31 82 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语句写出所有的情况。顺便提一下,感谢您提供替代解决方案! –