[英]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.