如果声明中的值等于多个?

时间:2014-09-05 14:14:49

标签: javascript jquery variables if-statement time

所以我正在写一个时区插件,我需要简化我的if语句,因为我想避免重复。我目前正在编写它来改变各州的时间(是的,我知道有些州可以有多个时区。我稍后会对其进行改进,可能是县。)

而不是说值是否等于这个OR这个OR这个等等我们可以将所有可能的值存储在变量中吗?下面,我有一个太平洋国家的数组,如何判断状态值是否等于其中一个?

的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/

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();

基本上,您可以更快地交换更多内存。但我认为这是你在这种情况下想做的事情。它也可以很容易地扩展到县,只需使用类似&#34; WA_King&#34;这样的键,因为相同的县名可能出现在不同的州。

答案 2 :(得分:0)

您可以在数组上使用indexOf()方法,如下所示:

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

如果该调用返回-1,则表示该元素未包含在该数组中。

请参阅此处了解工作示例http://jsfiddle.net/q98sLy5c/2/