“否则如果”语句内的for循环在较大的if/else if/else语句中

“否则如果”语句内的for循环在较大的if/else if/else语句中

问题描述:

是否有可能在JavaScript中做这样的事情?“否则如果”语句内的for循环在较大的if/else if/else语句中

if (name == 'foo') { 
    exampleFunction('some_arg'); 
} 
else if (name == 'bar') { 
    exampleFunction('another_arg'); 
} 
for (i in exampleObject) { 
    else if (name == exampleObject[i].name) { 
     exampleFunction(exampleObject[i].arg); 
    } 
} 
else { 
    exampleFunction('default') 
} 

我试过了,但在第8行得到了“意外的关键字”(for循环中的“else if”)。有没有另一种方法来做到这一点?

编辑:更新此以在循环中使用exampleObject [i]。我的错!

+1

为什么你甚至有'for'循环,如果你从不使用迭代器,'我'? – 2011-03-03 19:13:46

+0

你准备怎么做? – 2011-03-03 19:14:06

下面的代码看起来我错了,有for循环中,如果块

for (i in exampleObject) { 
    else if (name == exampleObject.name) { 
     exampleFunction(exampleObject.arg); 
    } 

不,我认为做到这一点的最好办法是将for循环进入一个else块,然后执行以下

if (name == 'foo') { 
    exampleFunction('some_arg'); 
} 
else if (name == 'bar') { 
    exampleFunction('another_arg'); 
} 
else { 
    var isFound = false; 
    for (i in exampleObject) { 
    if (name == exampleObject.name) { 
     exampleFunction(exampleObject.arg); 
     isFound = true; 
    } 
    } 
    if (!isFound) { 
    exampleFunction('default') 
    } 
} 

注意:它看起来像这个代码中有其他错误。 for循环声明了迭代变量i,但从未实际使用它。您是否认为在for回路中使用if检查使用i而不是name

这是不可能的。我会试着想出一个更好的例子,告诉你如何做你想做的事,但老实说,我不知道你想做什么。 for循环令我困惑。你能提供更多的信息吗?

+0

这可能应该是一个评论。 – nmichaels 2011-03-03 19:17:21

+0

我想过这个,但问题的第一部分是可以做到的,我的回答是不可能的。他的问题的第二部分显示了一个更好的例子,那个部分我不能在没有澄清的情况下回答,我不想在评论中仅就他的问题的第二部分要求澄清,而是在回答中回答第一部分 – 2011-03-03 19:45:24

总之,没有。您将在for语句之前使用最后一个大括号终止if语句块。

好了一个,不应该这样:

for (i in exampleObject) { 
    else if (name == exampleObject.name) { 
     exampleFunction(exampleObject.arg); 
    } 
} 

是这样的:

for (i in exampleObject) { 
    else if (name == i.name) { 
     exampleFunction(i.arg); 
    } 
} 

虽然我不知道多少(如果有的话)关于JS,这只是在猜测甚至不是你正在谈论的问题。

你是不利的做这样的:

bit = 0; 
if (name == 'foo') { 
    exampleFunction('some_arg'); 
} 
else if (name == 'bar') { 
    exampleFunction('another_arg'); 
} 
else { 
    bit = 1; 
} 

bit2 = 0; 
while(bit == 1){ 
    for (i in exampleObject) { 
     if (name == i.name) { 
      exampleFunction(i.arg); 
      bit = 0 
      bit2 = 1; 
     } 
    } 
} 

if(bit2 = 0){ 
    exampleFunction('default'); 
} 

+0

JavaScript有'break'。无需设置标志来停止内部循环。 – cHao 2011-03-03 19:29:03

这样的事情可能会有帮助吗?

found = false 

if (name == 'foo') { 
    found = true 
    exampleFunction('some_arg'); 
} 
else if (name == 'bar') { 
    found = true 
    exampleFunction('another_arg'); 
} 
else { 
    for (i in exampleObject) { 
    if (name == i.name) { 
     exampleFunction(i.arg); 
     found = true 
     break; 
    } 
    } 
} 

if !found: 
    exampleFunction('default') 

if (name == 'foo') { 
    exampleFunction('some_arg'); 
} 
else if (name == 'bar') { 
    exampleFunction('another_arg'); 
} 
else { 
    var isFound = false; 
    for (i in exampleObject) { 
    if (name == exampleObject.name) { 
     exampleFunction(exampleObject.arg); 
     isFound = true; 
     break; 
    } 
    } 
    if (!isFound) { 
    exampleFunction('default') 
    } 
} 

这里是正确的解决方案。它简短地说明循环中的if语句,就像其他情况一样,如果短路。这与#1的解决方案相同,但它正确短路。