2013-11-21 73 views
1

我有一個基於很多if/else語句的函數。該函數在那裏工作沒有問題,但我不知道是否有一個簡短的方法來重寫這個?如何縮短JavaScript 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; 
+0

我會在這裏使用的查找。 – user2864740

回答

4

的對象將符合這種情況相當好。

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 demo的行動。

+0

絕對最有效的使用這種對象查找。 – jfriend00

-1

使用switch

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

    ... 

} 

Documentation

-1

我推薦使用switch statement。你的另一個例子是一個三元運算符,會更加混亂。

2

你可以做類似

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

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

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

0

我會在這裏使用查找(或根據具體情況進行反向查找)。

三元(?:)是而不是由於它需要的嵌套量極高,因此需要進行適當的直接替換。

// 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; 
} 
1

使用鍵排列:

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]; 
} 
+0

沒有想到一個數組,這麼簡單。絕對短得多。 –

0

針對您的特殊任務,你也可以使用在-建立Date object

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

然而,這將返回 「1」,而不是「01」,所以你必須編寫一個函數,在需要時添加第一個零。

1

如何:

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

Inspired from this SO post.

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

+0

你測試過了嗎? Date.parse將返回一個數字而不是Date對象。你也不能在數字上使用切片。 – basilikum

+0

謝謝。我測試了原始的,然後在沒有測試的情況下做出了改變(啞巴)。現在編輯並修復。 http://jsfiddle.net/WFHWu/1/ – Jonah