2011-03-03 49 views
2

是否有可能在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

回答

0

下面的代碼看起來我錯了,有for循環中,如果塊

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

不,我認爲做到這一點的最好辦法是將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

0

這是不可能的。我會試着想出一個更好的例子,告訴你如何做你想做的事,但老實說,我不知道你想做什麼。 for循環令我困惑。你能提供更多的信息嗎?

+0

這可能應該是一個評論。 – nmichaels 2011-03-03 19:17:21

+0

我想過這個,但問題的第一部分是可以做到的,我的回答是不可能的。他的問題的第二部分顯示了一個更好的例子,那個部分我不能在沒有澄清的情況下回答,我不想在評論中僅就他的問題的第二部分要求澄清,而是在回答中回答第一部分 – 2011-03-03 19:45:24

0

總之,沒有。您將在for語句之前使用最後一個大括號終止if語句塊。

0

好了一個,不應該這樣:

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

0

這樣的事情可能會有幫助嗎?

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') 
1
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的解決方案相同,但它正確短路。