如何按日期对Javascript对象数组排序
How to Sort Javascript Object Array By Date?
我在按日期值对对象数组排序时遇到问题。我发现了许多其他用户以前问过的问题,我研究了所有可能的解决方案,但我仍然没有得到排序问题的解决方案。我创建了两个不同的数组来测试排序函数,但仍然无法按正确的顺序获取日期。这是我的数据:
[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;
});
我的输出仍然没有按正确的顺序对日期进行排序。我不确定我是做错了什么,还是在这种情况下会有其他问题。如果有人能帮忙,请告诉我。谢谢
这里的答案是正确的,但您永远不应该使用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);
});
使用Date.getTime()
函数对日期进行排序(按毫秒数):
dates.sort(function(a, b) {
a = (new Date(a.dates)).getTime();
b = (new Date(b.dates)).getTime();
return a - b;
});
您可以分割日期并按部分进行排序。
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>');
您粘贴的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;
});
演示
所以我尝试了上面的所有答案,其中一些答案为我的案例提供了接近但不完全的解决方案。所以我只是试着结合起来,这是我问题的正确解决方案:
dates.sort(function(a, b) {
return new Date(a).getTime() - new Date(b).getTime();
});
如果我试图只返回A和B,这对一条记录有效,但当我在onChange下拉列表中切换用户时,我又得到了相反的日期。因此,用new Date()
和getTime()
解决上述问题效果良好。谢谢大家的帮助!
相关文章:
- 按不同项目对对象数组进行排序
- 对对象数组中的数组进行排序
- 按特定键对对象数组进行排序
- 尝试对对象数组进行排序但拼接不是一个函数
- 对javascript中某些键的对象数组进行排序
- 在Javascript中对具有特定异常的对象数组进行排序
- Lodash 在 JavaScript 中对对象数组进行排序
- AngularJS使用对象属性排序多个对象数组
- 如何使用第二个数组中对象的相关属性对对象数组进行排序
- 按属性对对象数组进行排序
- 如何使用下划线根据自定义排序顺序对对象数组进行排序
- 如何通过连接多个异步javascript调用,从对象数组中排序并获取第一个obejct
- Javascript:使用value属性对关联数组进行排序,而不转换为对象数组
- 如何对姓氏进行排序,格式化电话号码,并返回一个包含对象数组值的字符串
- 如何按日期对Javascript对象数组排序
- 按唯一键将对象数组排序为数组
- 根据带有空值的多个条件对对象数组排序
- 在Javascript中保留对象数组排序后的插入顺序
- 如何按属性值长度对对象数组排序
- 使用lodash将对象数组排序为Top N,其中N +1为“other "”