如何按日期对Javascript对象数组排序?

如何按日期对Javascript对象数组排序?,javascript,arrays,sorting,date,Javascript,Arrays,Sorting,Date,我无法按日期值对对象数组进行排序。我发现了很多其他用户以前问过的问题,我检查了所有可能的解决方案,但我仍然没有得到排序问题的解决方案。我创建了两个不同的数组来测试排序函数,但仍然无法以正确的顺序获取日期。以下是我的数据: [Object { eventDate="12/12/2016", display_order="5"},Object { eventDate="12/12/2016", display_order="3"}] [Object { eventDate="04/21/201

我无法按日期值对对象数组进行排序。我发现了很多其他用户以前问过的问题,我检查了所有可能的解决方案,但我仍然没有得到排序问题的解决方案。我创建了两个不同的数组来测试排序函数,但仍然无法以正确的顺序获取日期。以下是我的数据:

[Object { eventDate="12/12/2016",  display_order="5"},Object { eventDate="12/12/2016",  display_order="3"}]

[Object { eventDate="04/21/2016",  display_order="3"},Object { eventDate="04/21/2016",  display_order="1"}]
我使用此逻辑按日期值对数据进行排序:

entries.sort(function(a,b){
    var i = new Date(a.eventDate);
    var j = new Date(b.eventDate);
    return i-j;
});
我的数据仍然没有使用此函数按正确顺序排序。然后我还尝试对数组进行如下排序:

var dates = Object.keys(groupedByDate);

console.log(dates)
这是可变日期的输出:
[“12/12/2016”,“04/21/2016”]

然后我试着这样做:

dates.sort(function(a, b) {
    a = new Date(a.dates);
    b = new Date(b.dates);
    return a>b ? -1 : a<b ? 1 : 0;
});
dates.sort(函数a、b){
a=新日期(a.日期);
b=新日期(b.日期);

返回a>b?-1:a使用
Date.getTime()
函数对日期进行排序(以毫秒为单位):


使用
Date.getTime()
函数对日期进行排序(以毫秒为单位):


您可以拆分日期并按部分排序

var数组=[{eventDate:“12/12/2016”,显示顺序:“5”},{eventDate:“12/12/2016”,显示顺序:“3”},{eventDate:“04/21/2016”,显示顺序:“3”},{eventDate:“04/21/2016”,显示顺序:“1”};
array.sort(函数(a,b){
var aa=a.eventDate.split('/'),
bb=b.eventDate.split('/');
返回aa[2]-bb[2]| | aa[0]-bb[0]| | aa[1]-bb[1];
});

document.write(''+JSON.stringify(array,0,4)+'');
您可以拆分日期并按部分排序

var数组=[{eventDate:“12/12/2016”,显示顺序:“5”},{eventDate:“12/12/2016”,显示顺序:“3”},{eventDate:“04/21/2016”,显示顺序:“3”},{eventDate:“04/21/2016”,显示顺序:“1”};
array.sort(函数(a,b){
var aa=a.eventDate.split('/'),
bb=b.eventDate.split('/');
返回aa[2]-bb[2]| | aa[0]-bb[0]| | aa[1]-bb[1];
});

document.write(“”+JSON.stringify(array,0,4)+“”)
您粘贴的JSON中似乎有问题。
{eventDate=“12/12/2016”,display_order=“3”}
。它必须是
假设您有正确的json格式 以下解决方案可能很有用

dates.sort(function(a, b) {
    return new Date(a).getTime() - new Date(b).getTime();
});
var数组=[{eventDate:“12/12/2016”,显示顺序:“5”},
{事件日期:“12/12/2016”,显示顺序:“3”},
{事件日期:“2016年4月21日”,显示顺序:“3”},
{事件日期:“04/21/2016”,显示顺序:“1”};
//通解
var sortedArray=array.sort(函数(a,b){
返回新日期(a.eventDate).getTime()-新日期(b.eventDate).getTime()
});
//三元算子求解
var l=array.sort(函数(a,b){

返回a.eventDate>b.eventDate?-1:a.eventDate您粘贴的json中似乎有问题。
{eventDate=“12/12/2016”,display_order=“3”}
。它必须是
,而不是
=
假设您有正确的json格式 以下解决方案可能很有用

dates.sort(function(a, b) {
    return new Date(a).getTime() - new Date(b).getTime();
});
var数组=[{eventDate:“12/12/2016”,显示顺序:“5”},
{事件日期:“12/12/2016”,显示顺序:“3”},
{事件日期:“2016年4月21日”,显示顺序:“3”},
{事件日期:“04/21/2016”,显示顺序:“1”};
//通解
var sortedArray=array.sort(函数(a,b){
返回新日期(a.eventDate).getTime()-新日期(b.eventDate).getTime()
});
//三元算子求解
var l=array.sort(函数(a,b){

返回a.eventDate>b.eventDate?-1:a.eventDate所以我尝试了上面的所有答案,其中一些答案为我的案例提供了接近但不完全的解决方案。所以我只是尝试组合,这是解决我问题的正确方法:


如果我试图只返回A和B,这对一条记录有效,但当我在onChange下拉列表中切换用户时,我又得到了相反的日期
效果很好。谢谢大家的帮助!

所以我尝试了上面的所有答案,其中一些答案为我的案例提供了接近但不完全的解决方案。所以我尝试了组合,这是我问题的正确解决方案:


如果我试图只返回A和B,这对一条记录有效,但当我在onChange下拉列表中切换用户时,我又得到了相反的日期
工作正常。谢谢大家的帮助!

这里的答案是正确的,但您不应该使用日期构造函数或Date.parse来解析字符串。使用库并传递格式,或者编写简单的函数,例如

函数parseMDY(s){
var b=s.split('/');
返回新日期(b[2],b[0]-1,b[1]);
}

document.write(parseMDY('4/30/2016');
这里的答案是正确的,但是你永远不应该使用日期构造函数或Date.parse来解析字符串。使用库并传递格式,或者编写一个简单的函数,例如

函数parseMDY(s){
var b=s.split('/');
返回新日期(b[2],b[0]-1,b[1]);
}

文件编写(parseMDY('4/30/2016'))
我假设您想按升序排序?您的排序对我有效,但它是按降序排序的…您还希望只将日期作为输出?我认为您的第一个排序函数是正确的,但日期构造函数的
日期字符串
不是。您应该检查日期实例的构造是否正确你想按升序排序吗?你的排序对我来说很有效,但它是按降序排序的……你也只希望输出日期吗?我认为你的第一个排序函数是正确的,但是日期构造函数的
日期字符串
不是。你应该检查日期实例的构造是否正确。不要麻烦了使用ternaries并返回
a-b
。获取.getTime的另一种方法是简单地将日期乘以1。例如,(new date())*1这与实际情况基本相同。与
一起使用时,日期对象应强制为数字
dates.sort(function(a, b) {
    return new Date(a).getTime() - new Date(b).getTime();
});