簡體   English   中英

Javascript - 按當前月份的時間順序對月份數組進行排序

[英]Javascript - Sort months array in chronological order basis current month

我在 javascript 中有一個月份列表。 我想根據當前日期按時間順序對其進行排序。

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

如果當前月份是 11 月,則排序數組應為["Nov", "Dec", "Jan", "Feb", "Mar"]

如果當前月份是 Jan,排序數組應該是["Jan", "Feb", "Mar", "Nov", "Dec"]

不要擔心轉換為枚舉或鍵值對。 可以處理。 我正在尋找的是如何實現這種排序功能的邏輯。

像這樣:

 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();

對數組進行排序,將 12 添加到比month早的month 這將它們置於與本月或之后相同的月份之后。

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

我建議你獲取當月的索引,
然后使用數組切片從該索引開始重組數組:

 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)

您可以為月份值取一個對象,並將想要的月份作為第一個,並通過檢查實際月份是否小於第一個月或按月份值進行排序。

 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"));

暫無
暫無

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

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