2016-05-26 70 views
0

我有for循環,它通過帶參數的數組。當下一個參數是「?」,「&」或「||」時,它不應該添加逗號,但它總是會增加。我不明白爲什麼,這裏是代碼:爲什麼這個JavaScript代碼不起作用?

var args = ["arg1","arg2","?","arg3"]; 
 
var query = ""; 
 
for (var i = 0; i < args.length; i++) { 
 

 
\t \t switch (args[i]) { 
 

 
\t \t \t case "?": 
 
\t \t \t \t query += " where "; 
 
\t \t \t \t break; 
 

 
\t \t \t case "&": 
 
\t \t \t \t query += " and "; 
 
\t \t \t \t break; 
 

 
\t \t \t case "||": 
 
\t \t \t \t query += " or "; 
 
\t \t \t \t break; 
 

 
\t \t \t default: 
 
\t \t \t \t if (args[i+1] != "?"); 
 
\t \t \t \t { 
 
\t \t \t \t \t query += args[i] + ", "; 
 
\t \t \t \t \t break; 
 
\t \t \t \t } 
 
\t \t \t \t query += args[i] + " "; 
 
\t \t \t \t break; 
 

 
\t \t } 
 

 
\t } 
 
document.write(query);

當我鍵入此(這是由 「」 分裂併發送至陣列參數):

arg1 arg2 ? arg3 

它打印如下:

arg1, arg2, where arg3, // while it should be arg1, arg2 where arg3, 

感謝您的幫助,問題是由extern腳本造成的。是的,我去掉分號;)

+0

它在哪裏不同'arg1,arg2,其中arg3,//它應該是arg1,arg2其中arg3,'? –

+1

@NinaScholz在'arg2'之後的逗號後面明顯不需要'where'。 – Pointy

+1

打印哪裏?您可能正在「打印」一個數組,而其'toString'方法會添加逗號。 – Teemu

回答

5

if語句被分解:

 if (args[i+1] != "?"); // <---- remove that semicolon 
     { 
      query += args[i] + ", "; 
      break; 
     } 

你已經有了一個流浪分號。這不是語法錯誤,但這意味着if不會執行任何操作。代碼中添加逗號總是運行,並退出switch之前的代碼不加加逗號。

+0

查看他的評論。 –

+1

@CayceK我有,我也運行了代碼。它的工作原理沒有分號。 – Pointy

+0

謝謝你試圖幫忙,但我解決了這個問題。這個問題是由extern腳本中的另一個數組引起的,現在一切正常。無論如何感謝您的答案。 – Nikola

1

你之間的分號你如果和你的塊:

if (args[i+1] != "?"); 

應該

if (args[i+1] != "?") 
1

可能有完全不同的方式來解決這個問題,這將使你的代碼更易於在不延長深化樹的ifswitch

快速示例,

// define some dictionaries 
let logicDict = Object.assign(Object.create(null), { 
    '?': 'where', 
    '&': 'and', 
    '||': 'or' 
}); 

// define some flags 
let noComma = false; 

// reduce your array 
['arg1', 'arg2', '?', 'arg3'].reduceRight((str, e) => { 
    if (e in logicDict) { 
     noComma = true; 
     return logicDict[e] + ' ' + str; 
    } 
    if (!noComma) e += ','; 
    noComma = false; 
    return e + ' ' + str; 
}, '').slice(0, -1); 
// "arg1, arg2 where arg3," 
+0

這很有趣。謝謝! – Nikola

0

感謝注意分號的人,問題是由extern腳本引起的。

+1

你的腳本,修改* only *以聲明'query'並將'args'作爲Node.js程序掛接到'process.argv',不能用分號工作,但是一旦分號符號就可以正確工作除去。 – Pointy

+1

確實。留下分號,它仍然是錯誤的。 – 1983

+0

大聲笑,我說**感謝注意分號**,你仍然在抱怨分號?!是的,這是一個錯誤,我知道!不管它聽起來如何愚蠢,但它實際上工作,即使用分號(我真的不知道如何,但我**刪除它**)。我不會重複這個傢伙。請說,關於這一點,沒有什麼可說的。再次感謝您的注意! – Nikola

相關問題