簡體   English   中英

如何縮短JavaScript if / else語句?

[英]How to shorten JavaScript if/else statements?

我有一個基於許多if / else語句的函數。 該功能可以正常工作,但我想知道是否有更短的方法來重寫它?

month = get_month(field.value); //this is inside another function

function get_month(m){ if(m==='January'){return'01';} else if(m==='Febuary'){return'02';} else if(m==='March'){return'03';} else if(m==='April'){return'04';} else if(m==='May'){return'05';} else if(m==='June'){return'06';} else if(m==='July'){return'07';} else if(m==='August'){return'08';} else if(m==='September'){return'09';} else if(m==='October'){return'10';} else if(m==='November'){return'11';} else if(m==='December'){return'12';}}

我之前已經看過並使用過它,但是我不知道是否可以在這樣的規模上工作:

var x = y !== undefined ? y : 1;

一個對象很適合這種情況。

function getMonth(m) {
  var months = {
    January: "01",
    February: "02",
    March: "03",
    April: "04",
    May: "05",
    June: "06",
    July: "07",
    August: "08",
    September: "09",
    October: "10",
    November: "11",
    December: "12"
  }
  return months[m];
}

您可以在此jsFiddle演示中看到這一點。

你可以做類似的事情

var monthNumbers = {
  "January": "01",
  "February": "02",
  //...
  "December": "12",
};

var getMonth = function(m) {
  return monthNumbers[m];
};

更好的是,如果您要使用JavaScript處理日期/時間,我強烈建議您使用moment.js

使用鍵數組:

var month = {
  January : "01",
  Febuary : "02",
  March : "03",
  April : "04",
  May : "05",
  June : "06",
  July : "07",
  August : "08",
  September : "09",
  October : "10",
  November : "11",
  December : "12"
}

function get_month(m){
  return month[m];
}

怎么樣:

function getMonth(mon){
   var monthNum = new Date(mon +" 1, 2012").getMonth()+1;
   return ("0" + monthNum).slice(-2);
}

受此SO帖子啟發。

小提琴: http : //jsfiddle.net/WFHWu/1/

我將在此處使用查找(或視情況而定進行反向查找)。

由於需要大量嵌套,因此三元( ?: :) 適合直接替換。

// The lookup, uses a dummy object (that will never match the indexOf)
// such that January is at index 1, etc.
var months = [{}, 'January', .., 'December'];

// This just returns a number, and expects the caller to format the number
// for display as appropriate. Returns 0 for an invalid month name.
function get_month(m) {
  var monthNumber = months.indexOf(m); // -1 if not found
  return monthNumber > 0 ? monthNumber : 0;
}

對於您的特定任務,您還可以使用內置的Date對象

function get_month(m) {
    return new Date(m + " 1").getMonth() + 1;
}

但是,這將返回“ 1”而不是“ 01”,因此您必須編寫一個在需要時添加第一個零的函數。

使用switch

var ret;
switch (m) {
    case 'January':
        ret = '01';
        break;
    case 'Febuary':
        ret = '02';
        break;

    ...

}

文件資料

我建議改用switch語句 您的另一個示例是三元運算符,甚至會更加混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM