如何缩短JavaScript if/else语句?

如何缩短JavaScript if/else语句?,javascript,function,if-statement,shortcut,Javascript,Function,If Statement,Shortcut,我有一个基于很多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';} e

我有一个基于很多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;

使用
开关

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

    ...

}

.

使用
开关

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

    ...

}

.

我建议换一种。你的另一个例子是三元运算符,它会更混乱。

我建议使用一个。你的另一个例子是三元运算符,它会更混乱。

你可以这样做

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

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

更好的是,如果您使用JavaScript处理日期/时间,我强烈建议您可以执行以下操作

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

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

更好的是,如果您使用JavaScript处理日期/时间,我强烈建议使用对象来处理这种情况

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

你可以在这个例子中看到这一点。

一个对象将非常适合这种情况

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];
}
你可以在这上面看到这一点。

我会在这里使用查找(或者,根据具体情况使用反向查找)

三元(
?:
)不是合适的直接替代品,因为它需要大量嵌套

// 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;
}
我会在这里使用查找(或者,根据具体情况使用反向查找)

三元(
?:
)不是合适的直接替代品,因为它需要大量嵌套

// 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;
}
使用密钥数组:

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];
}
使用密钥数组:

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

对于特定任务,您还可以使用内置:


但是,这将返回“1”而不是“01”,因此您必须编写一个函数,在需要时添加第一个零。

对于您的特定任务,您还可以使用内置:

但是,这将返回“1”而不是“01”,因此您必须编写一个函数,在需要时添加第一个零。

如何:

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

小提琴:怎么样

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


Fiddle:

我会在这里使用查找。我会在这里使用查找。使用这样的对象查找肯定是最有效的。使用这样的对象查找肯定是最有效的。没有想到数组,这么简单。肯定短了很多。没有想到数组,这么简单。肯定短了很多。你测试过这个吗?parse将返回一个数字,而不是日期对象。您也不能使用数字切片。谢谢。我测试了原始版本,然后在没有测试的情况下进行了更改(哑巴)。现在已编辑并修复。你测试过这个吗?parse将返回一个数字,而不是日期对象。您也不能使用数字切片。谢谢。我测试了原始版本,然后在没有测试的情况下进行了更改(哑巴)。现在已编辑并修复。