2012-08-02 104 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

我决定重新设计我的整个逻辑,我开发更好的东西。

感谢所有帮助,虽然家伙!