【问题标题】:javascript - moving for loop content into functionsjavascript - 将 for 循环内容移动到函数中
【发布时间】:2013-05-12 12:42:31
【问题描述】:

我有一个for 循环来遍历数组并显示日期。我编写了一些代码来将月份从数字转换为文本。代码如下所示:

for (var i=0; i < arrayLength; i++) {
  //==== MONTH DATA
  var month = data[1];

  //==== DECLARE MONTH
  if (month == '01') { var month = "Jan" }
  if (month == '02') { var month = "Feb" }
  if (month == '03') { var month = "Mar" }
  if (month == '04') { var month = "Apr" }
  if (month == '05') { var month = "May" }
  if (month == '06') { var month = "June" }
  if (month == '07') { var month = "July" }
  if (month == '08') { var month = "Aug" }
  if (month == '09') { var month = "Sept" }
  if (month == '10') { var month = "Oct" }
  if (month == '11') { var month = "Nov" }
  if (month == '12') { var month = "Dec" }

  alert(month);
}

现在我想在整个网站的各种 for 循环中使用月份转换器。所以我想做一些事情,比如把它放在一个我每次都可以触发的函数中。例如:

function declareMonth(){
  //==== DECLARE MONTH
  if (month == '01') { var month = "Jan" }
  if (month == '02') { var month = "Feb" }
  if (month == '03') { var month = "Mar" }
  if (month == '04') { var month = "Apr" }
  if (month == '05') { var month = "May" }
  if (month == '06') { var month = "June" }
  if (month == '07') { var month = "July" }
  if (month == '08') { var month = "Aug" }
  if (month == '09') { var month = "Sept" }
  if (month == '10') { var month = "Oct" }
  if (month == '11') { var month = "Nov" }
  if (month == '12') { var month = "Dec" }
}

for (var i=0; i < arrayLength; i++) {
  //==== MONTH DATA
  var month = data[1];

  declareMonth();

  alert(month);
}

但这不起作用。谁能解释一下这是怎么做到的?

【问题讨论】:

  • 您对使用var 有点过度热情。无需在执行这些分配的所有 if 语句中包含 var
  • @nnnnnn 并不是说​​他应该做 12 个单独的任务......
  • 不,@Alnitak,显然你的回答是一个更好的方法。不过,OP 的另一点是,关于您的声明 "I have a jQuery for loop" -您错了,因为您的问题中没有任何 jQuery。你所拥有的是一个普通的 JavaScript for 循环。
  • @coop 这与 jQuery 无关。这是一个普通的 javascript for 循环。
  • 是的,好点。谢谢你的建议,我会尽量减少它。你对 javascript/jQuery 的看法是对的!

标签: javascript function loops for-loop


【解决方案1】:

您需要返回月份值。您还需要正确编写函数:

function getMonthName(n) {
    var months = ["Jan", "Feb", ... ];  // omitted for brevity
    return months[n - 1];
}

有用法:

for (var i=0; i < arrayLength; i++) {
  var month = data[1];
  var name = getMonthName(month);
  alert(name);
}

注意:如果提供的月份超出范围,结果将为 undefined

【讨论】:

  • 天才!它解决了我的问题并大大减少了代码。谢谢!
【解决方案2】:

作为类比,你的功能走上了正确的轨道,但 javascript 有一些更简单的方法可以用更少的代码完成你所做的事情。

使用哈希

如果我们从上面获取您的 if 示例,我们可以将其转换为哈希和简单函数:

var monthName = function( num ){
  var months = {
    '01':'Jan', '02':'Feb',
    '03':'Mar', '04':'Apr',
    '05':'May', '06':'Jun',
    '07':'Jul', '08':'Aug',
    '09':'Sep', '10':'Oct',
    '11':'Nov', '12':'Dec'
  };

  return months[ num ];
};

此方案要求函数接受的num参数为字符串。

Heres a demo

使用数组

如果您使用数字调用您的月份,请使用数组:

var monthName = function( num ){
  var months = [
    'Jan', 'Feb', 'Mar', 'Apr',
    'May', 'Jun', 'Jul', 'Aug',
    'Sep', 'Oct', 'Nov', 'Dec'
  ];

  return months[ num - 1 ];
};

Heres a demo

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2015-11-17
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多