我有一个问题是按日期值对对象数组进行排序。我发现其他用户之前问过很多问题,我经历了所有可能的解决方案,但仍然无法解决我的排序问题。我创建了两个不同的数组来测试排序功能,但仍然无法按正确的顺序获取日期。这是我的数据:
[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;
});
我的输出仍然没有按正确的顺序排序我的日期。在这种情况下,我不确定我是做错了什么还是别的什么问题。如果有人可以提供帮助,请告诉我。感谢。
答案 0 :(得分:1)
使用Date.getTime()
函数(按毫秒数)对日期进行排序:
dates.sort(function(a, b) {
a = (new Date(a.dates)).getTime();
b = (new Date(b.dates)).getTime();
return a - b;
});
答案 1 :(得分:1)
您可以拆分日期并按部件排序。
var array = [{ eventDate: "12/12/2016", display_order: "5" }, { eventDate: "12/12/2016", display_order: "3" }, { eventDate: "04/21/2016", display_order: "3" }, { eventDate: "04/21/2016", display_order: "1" }];
array.sort(function (a, b) {
var aa = a.eventDate.split('/'),
bb = b.eventDate.split('/');
return aa[2] - bb[2] || aa[0] - bb[0] || aa[1] - bb[1];
});
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
答案 2 :(得分:1)
似乎您粘贴的json中存在问题。{ eventDate="12/12/2016", display_order="3"}
。而不是=
它必须是:
假设你有正确的json格式
以下解决方案可能很有用
var array = [{ eventDate:"12/12/2016", display_order:"5"},
{ eventDate:"12/12/2016", display_order:"3"},
{ eventDate:"04/21/2016", display_order:"3"},
{ eventDate:"04/21/2016", display_order:"1"}];
// Generic solution
var sortedArray = array.sort(function(a,b) {
return new Date(a.eventDate).getTime() - new Date(b.eventDate).getTime()
});
// Solution using ternary operator
var l =array.sort(function(a,b){
return a.eventDate>b.eventDate ? -1 : a.eventDate<b.eventDate ? 1 : 0;
});
答案 3 :(得分:1)
这里的答案是在正确的轨道上但你永远不应该使用Date构造函数或Date.parse来解析字符串。使用库并传递格式,或编写一个简单的函数,例如
function parseMDY(s) {
var b = s.split('/');
return new Date(b[2],b[0]-1,b[1]);
}
document.write(parseMDY('4/30/2016'));
所以现在你有:
entries.sort(function(a,b) {
return parseMDY(a) - parseMDY(b);
});
答案 4 :(得分:0)
所以我尝试了上面的所有答案,其中一些给了我接近但不完全解决我的情况。所以我只是尝试结合,这是我的问题的正确解决方案:
dates.sort(function(a, b) {
return new Date(a).getTime() - new Date(b).getTime();
});
如果我试图返回A和B,这对一条记录起作用,但是当我在onChange下拉切换用户时,我又得到了反向日期。因此,使用new Date()
和getTime()
的解决方案可以正常工作。谢谢大家的帮助!