Javascript-按时间顺序将当前月份排序为月份数组

时间:2019-11-26 17:35:11

标签: javascript

我有一个使用javascript的月份列表。我想根据当前日期按时间顺序对其进行排序。

示例 monthsArr = ["March", "February", "November", "December", "January"]

如果当前月份为11月,则排序后的数组应为["Nov", "Dec", "Jan", "Feb", "Mar"]

如果当前月份为1月,则排序后的数组应为["Jan", "Feb", "Mar", "Nov", "Dec"]

不用担心转换为枚举或键值对。可以处理。我正在寻找的是有关如何实现此排序功能的逻辑。

3 个答案:

答案 0 :(得分:2)

像这样:

var months =
{
  January: 0,
  February: 1,
  March: 2,
  April: 3,
  May: 4,
  // et&c
  November: 10,
  December: 11
};

var monthsArr = ["March", "February", "November", "December", "January"];

var month = new Date().getMonth();

monthsArr.sort(function(m1, m2)
{
  var n1 = months[m1], n2 = months[m2];
  if (n1 < month)
  {
    n1 = n1 + 12;
  }
  if (n2 < month)
  {
    n2 = n2 + 12;
  }
  return n1 - n2;
});

console.log(monthsArr);

具有名称和月份编号的映射,例如

var months =
{
  January: 0,
  February: 1,
  March: 2,
  April: 3,
  May: 4,
  // et&c
  November: 10,
  December: 11
};

获取当前月份

var month = new Date().getMonth();

对数组进行排序,比month早12个月。将它们放在与本月或更晚的月份相同的月份之后。

monthsArr.sort(function(m1, m2)
{
  var n1 = months[m1], n2 = months[m2];
  if (n1 < month)
  {
    n1 = n1 + 12;
  }
  if (n2 < month)
  {
    n2 = n2 + 12;
  }
  return n1 - n2;
});

答案 1 :(得分:1)

我建议您获取当月的索引,
然后使用数组切片从该索引开始重新组成数组:

var m = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

var cur = new Date().getMonth()

var sorted = [...m.slice(cur), ...m.slice(0,cur)]

console.log(sorted)

答案 2 :(得分:1)

您可以使用一个对象作为月份值,并以想要的月份为第一个月,然后通过检查实际月份是否小于第一个月或月份值来进行排序。

function sort(array, first) {
    var months = { January: 1, February: 2, March: 3, April: 4, May: 5, June: 6, July: 7, August: 8, September: 9, October: 10, November: 11, December: 12 };
    return array.sort((a, b) =>
        (months[a] < months[first]) - (months[b] < months[first]) ||
        months[a] - months[b]
    );
}

console.log(...sort( ["March", "February", "November", "December", "January"], "November"));
console.log(...sort( ["March", "February", "November", "December", "January"], "January"));

相关问题