簡體   English   中英

按時間順序對日期進行多維數組排序的最快方法

[英]Fastest way to sort multidimensional array with dates in chronological order

我有以下格式的日期

[
    ["First Name", "10 Sep. 2017 2:00 PM"],
    ["First Name", "10 Sep. 2017 2:00 PM"],
    ["First Name", "10 Sep. 2017 1:00 PM"],
    ["First Name", "10 Sep. 2017 8:00 AM"],
    ["First Name", "9 Sep. 2017 2:00 PM"],
    ["First Name", "9 Sep. 2017 2:00 PM"],
    ["First Name", "9 Sep. 2017 1:00 PM"],
    ["First Name", "9 Sep. 2017 8:00 AM"]
]

並希望將其作為輸出:

[
    ["First Name", "10 Sep. 2017 8:00 AM"],
    ["First Name", "10 Sep. 2017 1:00 PM"],
    ["First Name", "10 Sep. 2017 2:00 PM"],
    ["First Name", "10 Sep. 2017 2:00 PM"],
    ["First Name", "9 Sep. 2017 8:00 AM"],
    ["First Name", "9 Sep. 2017 1:00 PM"],
    ["First Name", "9 Sep. 2017 2:00 PM"],
    ["First Name", "9 Sep. 2017 2:00 PM"]
]

請注意日期的順序,但時間是按時間順序更改的。 換句話說,時代倒轉了。 我怎樣才能做到這一點? 這是我的代碼,在此之前,我必須生成第一個示例數組

function sortTable(data) {

  return sortTableHelper(data);

  function sortTableHelper(data) {
   data = data.sort((elem1, elem2) => {
     var date1 = moment(elem1[1], 'D MMM YYYY h:m A')
       , date2 = moment(elem2[1], 'D MMM YYYY h:m A');

     if (date1.isAfter(date2)) return 1;

     return -1;
   });

   return data;
 }
}

如何修改必須按時間順序排列的現有排序代碼?

反轉返回碼,以便您的結果遞增而不是遞減:

if (date2.isAfter(date1)) return 1;
if (date1.isAfter(date2)) return -1;
return 0;

注意我更改了代碼,以使當項目相等時返回0。

您必須按日期(不帶小時)和按小時進行排序才能獲得所需的結果,如下所示:

 var input = [["First Name", "10 Sep. 2017 2:00 PM"], ["First Name", "10 Sep. 2017 2:00 PM"], ["First Name", "10 Sep. 2017 1:00 PM"], ["First Name", "10 Sep. 2017 8:00 AM"], ["First Name", "9 Sep. 2017 2:00 PM"], ["First Name", "9 Sep. 2017 2:00 PM"], ["First Name", "9 Sep. 2017 1:00 PM"], ["First Name", "9 Sep. 2017 8:00 AM"]]; function sortTable(data) { return sortTableHelper(data); function sortTableHelper(data) { return data.sort((a, b) => { var dateA = new Date(a[1]); var dateB = new Date(b[1]); return dateA.getHours() - dateB.getHours() + dateB.setHours(0) - dateA.setHours(0); }); } } console.log(sortTable(input)); 

注意 :完成時不使用momentjs

暫無
暫無

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

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