在第一个值(日期)上排序对的数组

时间:2014-08-05 11:59:56

标签: javascript

我想用数组排序数组,其中每对中的第一项是日期,第二项是整数。我想在日期上对它进行排序,但我仍然坚持如何做到这一点。

示例数组

var dataTable = [[Fri Jun 13 2014 17:44:25 GMT+0200 (W. Europe Daylight Time),4],[Tue May 27 2014 06:56:06 GMT+0200 (W. Europe Daylight Time),4]]

dataTable.sort(function(a,b) { return  a[0]<b[0]});//How to sort the arraylist on the dates.

提前致谢。

2 个答案:

答案 0 :(得分:2)

您需要一个小函数将日期字符串转换为Date对象:

// Create a Date object from a date string in the format Tue May 27 2014 06:56:06
function parseDate(d) {
  var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,
                jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};
  var b = d.split(/[ :]/);
  return new Date(b[3], months[b[1].toLowerCase()], b[2], b[4], b[5], b[6]);
}

然后你可以在sort函数中使用日期对象:

var dataTable = [
  ['Fri Jun 13 2014 17:44:25 GMT+0200 (W. Europe Daylight Time)',4],
  ['Tue May 27 2014 06:56:06 GMT+0200 (W. Europe Daylight Time)',4]
];

dataTable.sort(function(a, b){
  return parseDate(a[0]) - parseDate(b[0])
});

请注意,将Date函数作为带有字符串参数的构造函数(请参阅ECMAScript §15.9.3.2)调用与调用 Date.parse 相同,并且日期字符串的解析在很大程度上取决于实现,即使在支持它的浏览器中使用格式specified in ECMA-262也不可靠。

答案 1 :(得分:0)

这应该有效

     var dataTable = [
    ["Fri Jun 13 2014 17: 44: 25 GMT + 0200(W.Europe Daylight Time)", 4],
    ["Tue May 27 2014 06: 56: 06 GMT + 0200(W.Europe Daylight Time)", 4],
    ["Fri August 13 2014 17: 44: 25 GMT + 0200(W.Europe Daylight Time)", 4],
    ["Tue October 27 2014 06: 56: 06 GMT + 0200(W.Europe Daylight Time)", 4],
    ["Tue February 27 2014 06: 56: 06 GMT + 0200(W.Europe Daylight Time)", 4]
];


dataTable.sort(function (a, b) {
    return new Date(a[0]).getTime() - new Date(b[0]).getTime();
});
console.log(dataTable);

<强> Check the Working Fiddle Here