使用日期顺序对日期排序的多维数组的最快方法

时间:2017-09-19 20:33:17

标签: javascript sorting momentjs

我的日期格式如下

[
    ["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;
 }
}

如何修改现有的排序代码,我必须按时间顺序排列时间?

2 个答案:

答案 0 :(得分:1)

反转返回代码,使结果呈升序而非降序:

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

注意我更改了代码,以便在项目相同时返回0.

答案 1 :(得分: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的情况下完成。