2014-09-05 84 views
-1

所以我正在編寫一個時區插件,我需要簡化if語句,因爲我想避免重複。我現在正在寫它來改變州的時間(是的,我知道有些州可以有多個時區,稍​​後我可能會改進它,可能是由縣。)如果聲明的值等於許多?

而不是說如果值等於這個或這或者這個或這個等等,我們可以存儲所有可能的值在一個變量?下面,我有一個太平洋國家數組,我怎麼知道狀態值是否等於其中之一?

jQuery的

function GetClientTime() { 
    // current time 
    var dt = new Date(); 
    // pacific time 
    var pacifictime = dt.getHours() - 2 + ":" + (dt.getMinutes() < 10 ? '0' : '') + dt.getMinutes(); 
    // mountain time 
    var mountaintime = dt.getHours() - 1 + ":" + (dt.getMinutes() < 10 ? '0' : '') + dt.getMinutes(); 
    // central time 
    var centraltime = dt.getHours() + ":" + (dt.getMinutes() < 10 ? '0' : '') + dt.getMinutes(); 
    // eastern time 
    var easterntime = dt.getHours() + 1 + ":" + (dt.getMinutes() < 10 ? '0' : '') + dt.getMinutes(); 

    // get am/pm 
    var hours = new Date().getHours(); 
    var ampm = (hours >= 12) ? "PM" : "AM"; 

    var pacificstates = [ 
     "WA", "OR", "CA", "NV" 
    ] 

    if ($('#state').val() == pacificstates) { 
     $('#currenttime').show().val(pacifictime + " " + ampm); 
    } else if ($('#state').val() == 'CO') { 
     $('#currenttime').show().val(mountaintime + " " + ampm); 
    } else if ($('#state').val() == 'TX' || $('#state').val() == 'LA') { 
     $('#currenttime').show().val(centraltime + " " + ampm); 
    } else if ($('#state').val() == 'NY' || $('#state').val() == 'NJ') { 
     $('#currenttime').show().val(easterntime + " " + ampm); 
    } else { 
     $('#currenttime').hide(); 
    } 
} 

http://jsfiddle.net/q98sLy5c/1/

+0

RE:獎金,那一刻是很容易的日期格式流行的LIB http://momentjs.com/的 – briansol 2014-09-05 14:17:58

+0

可能重複[替代百萬IF語句(HTTP:/ /stackoverflow.com/q/10029089/1048572) – Bergi 2014-09-05 14:24:21

回答

0

您可以使用indexOf()方法陣列上是這樣的:

if (pacificstates.indexOf($('#state').val()) !== -1) 

如果調用返回-1,這意味着該元素是不是該數組中包含。

看到這裏的工作示例http://jsfiddle.net/q98sLy5c/2/

0

使用switch statement

switch語句計算表達式,表達式的值匹配到case條款,並執行語句相關的無線網絡那種情況。

var result = false; 

swtich ($('#state').val()) { 
    /* If the value is "CO"... */ 
    case 'CO': 
     result = pacifictime + " " + ampm; 
     break; 
    /* If the value is "TX" or "LA"... */ 
    case 'TX': 
    case 'LA': 
     result = entraltime + " " + ampm; 
     break; 
    default: 
     break; 
} 

/* If the result was set, display the result. */ 
if (result) 
    $('#currenttime').show().val(result); 
/* Otherwise, hide it. */ 
else 
    $('#currenttime').hide(); 
+0

好的,我可以將案例'TX'變成一個包含所有可能中心狀態的變量嗎? – triplethreat77 2014-09-05 14:20:53

+1

@ triplethreat77你可以使用數組並使用'indexOf'來檢查你的值是否存在於該數組中。 – 2014-09-05 14:21:52

+0

你能舉個例子嗎?我有一個小提琴設置。 – triplethreat77 2014-09-05 14:22:35

0

如果你想使用一個對象很可能是你的最長時間有效的手段去從國家到時區。

var stateToTimeZone = {}; 

stateToTimeZone['TX'] = entraltime + " " + ampm; 
stateToTimeZone['LA'] = entraltime + " " + ampm; 
stateToTimeZone['CO'] = pacifictime + " " + ampm; 
. . . 
var result = stateToTimeZone[$('#state').val()]; 
if (result) 
    $('#currenttime').show().val(result); 
/* Otherwise, hide it. */ 
else 
    $('#currenttime').hide(); 

基本上,您交易的內存使用率更快。但我認爲這是你在這種情況下想要做的。它也可以很容易地擴展爲縣,只是使用像「WA_King」這樣的鍵,因爲同一縣名可能出現在不同的州。