2012-08-02 73 views
0

有沒有辦法讓這個更漂亮;改進多個if語句的語法?

if ($("#Input").text === "A") { sOutput = "a"; lColor = "red"; } 
if ($("#Input").text === "B") { sOutput = "b"; lColor = "orange"; } 
if ($("#Input").text === "C") { sOutput = "c"; lColor = "yellow"; } 
if ($("#Input").text === "D") { sOutput = "d"; lColor = "green"; } 
if ($("#Input").text === "E") { sOutput = "e"; lColor = "blue"; } 
if ($("#Input").text === "F") { sOutput = "f"; lColor = "violet"; } 
... 

真正的代碼更加廣泛,與& &和||在不同變量之間。但每行都遵循相同的語法,保存我正在查找的'letter(s)'以及我設置的變量。對我來說,我感到很浪費,我有很多ifs。

*該代碼是虛擬代碼來說明我的觀點。

編輯

僞代碼是不是說明我的觀點,所以這裏是真正的樣品;

if ($(".Fig_Main").hasClass("Active")) { 
     sect_1 = (($(".Fig_A").hasClass("Active")) && ($(".Fig_1").hasClass("Active"))) ? "Slide_A1" 
       : (($(".Fig_A").hasClass("Active")) && ($(".Fig_B").hasClass("Active"))) ? "Slide_AB" 
       : (($(".Fig_1").hasClass("Active")) && ($(".Fig_B").hasClass("Active"))) ? "Slide_1B" 
       : (($(".Fig_1").hasClass("Active")) && ($(".Fig_3").hasClass("Active"))) ? "Slide_13" 
       ... 

我有此塊(這是幾行更長)重複幾次,爲不同的sect_#每個時間,並且得到的設定值(Slide_XY)。

所有當前的建議非常感謝。保持它來。

+0

使用地圖和下部框。不知道非虛擬代碼是否有益,但是 - 不知道你真的是什麼*真的很難知道如何提供幫助。 – 2012-08-02 02:01:33

+0

代碼可讀,但不一定高效。如果沒有'else',javascript將別無選擇,只能測試所有條件。 – 2012-08-02 02:03:00

+0

@RosdiKasim,它不是'Java'而是'javascript'。 – 2012-08-02 02:03:48

回答

7

你可以做這樣的事情:

var dic = { 
    "a": "red", 
    "b": "orange", 
    "c": "yellow", 
    "d": "green", 
    "e": "blue", 
    "f": "violet" 
}; 

sOutput = $("#Input").text().toLowerCase(); 
lColor = dic[sOutput]; 
+0

雖然這很好,但我對轉換爲小寫字母毫無興趣,這只是示例的一部分。如果這種格式可以支持每個'if'聲明多個變量,那麼我希望這樣。 – 2012-08-02 02:25:18

2

您可以使用對象文本。

//extend the object as needed. 
var obj = { 
    'A': { sOutput:'a', lColor: 'red' }, 
    'B': { sOutput:'b', lColor: 'orange' }, 
} 

var x = 'B'; 

console.log(obj[x]); 

編輯:

你甚至可以藉此進一步與測試,看看是否 'X' 變量的值甚至被定義爲:

var x = 'Z'; 

if(!(x in obj)){ 
    //do stuff if Z isn't defined 
} 
0

switch說法是可讀的。你可以嘗試其他任何花哨的方式,但對我來說,可讀的優先數1

switch ($("#Input").text){ 
    case "A": 
     sOutput = "a"; 
     lColor = "red"; 
     break; 
    case "B": 
     sOutput = "b"; 
     lColor = "orange"; 
     break; 
    case "C": 
     sOutput = "c"; 
     lColor = "yellow"; 
     break; 
} 
+0

如果它是($(「#Input」+ target +「_Container」)。text),我想翻轉'target'以及該怎麼辦? – 2012-08-02 02:27:56

+0

聽起來像你有類似的聲音'CSS ID',在這種情況下,你應該使用正確的jQuery'結束與'或'開始'選擇器,請參閱:http://api.jquery.com/category/selectors/ – 2012-08-02 02:33:36

0

我決定重新設計我的整個邏輯,我開發更好的東西。

感謝所有幫助,雖然傢伙!