0

我对javascript有点陌生,我只是想知道这是否可能。

考虑一下:

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)是一个返回true或返回的方法,false但问题是我不能以任何方式更改该方法(例如更改返回值)。现在,如果我想重构代码,我可能会将所有 foo 参数值放在一个集合中,为 if 语句中的每个唯一操作创建一个方法,遍历所有参数值并在 foo(n ) 返回 true,但这似乎是一种非常丑陋的做法。是否有更好的方法可以使用 switch 语句来实现这一点?

4

2 回答 2

1

如果你想使用 switch 语句,你可以使用这个技巧(不确定它是否真的更好):

switch( true ) {
    case foo('1'):
        // do something
        break;
    case foo('2'):
        // and so on
        break;
    default:
        // all returned false
}
于 2013-03-31T16:12:39.643 回答
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;
}
于 2013-03-31T16:17:38.330 回答