如何按日期对 $.each() 函数进行排序
Posted
技术标签:
【中文标题】如何按日期对 $.each() 函数进行排序【英文标题】:How do I sort $.each() functions by date 【发布时间】:2019-05-20 15:58:00 【问题描述】:基本上我需要对 $.each(messages, function()); 进行排序按我的数组中的日期。我尝试过的方法没有奏效,正在努力寻找一个好的方法。
我主要尝试使用 sort 函数对日期进行排序,但要么在控制台中收到关于它不是函数的错误,要么它根本没有做任何事情。
var messages = [
contact_name: "Josef Braga",
time: "2018-12-20 01:53:49",
isRead: 1,
,
contact_name: "289-1445",
time: "2018-12-20 02:53:49",
isRead: 0,
,
];
$(".phone-content").append("<div class='phone-inner'></div>");
$.each(messages, function ()
$(".phone-inner").append("" +
"<div data-date='" + this.time + "' class='phone-message'>" +
" <div class='mtop'>" +
" <p class='c-left " + (!this.isRead ? "new-message" : "") + "'>" + this.contact_name + "</p>" +
" <p class='c-right'>" + relative_time(this.time) + "</p>" +
" </div>" +
" <div class='mdesc'>" +
" <p>Dette er en ny besked! Hold da kæft hvor fedt mayn!</p>" +
" </div>" +
" <hr />" +
" </div>" +
" </div>");
);
预期的结果应该是最新的消息排在顶部 - 但它只是按照它在消息数组中设置的方式对其进行排序。
【问题讨论】:
【参考方案1】:在您的情况下,时间是一个字符串,因此它按字母顺序排序。您需要先将时间转换为时间戳(将是数字),然后对其进行排序。
例如,假设您的消息数组如下所示:
var messages = [
contact_name: "Josef Braga",
time: "2018-12-20 01:53:49",
isRead: 1,
,
contact_name: "289-1445",
time: "2018-12-20 02:53:49",
isRead: 0,
,
contact_name: "289-1445",
time: "2018-12-19 02:53:49",
isRead: 0,
,
contact_name: "289-1445",
time: "2018-12-19 02:54:49",
isRead: 0,
];
使用此函数进行排序:
messages.sort(function(a, b)return Date.parse(a.time) - Date.parse(b.time));
将输出:
[
contact_name: "289-1445",
time: "2018-12-19 02:53:49",
isRead: 0,
,
contact_name: "289-1445",
time: "2018-12-19 02:54:49",
isRead: 0,
contact_name: "Josef Braga",
time: "2018-12-20 01:53:49",
isRead: 1,
,
contact_name: "289-1445",
time: "2018-12-20 02:53:49",
isRead: 0,
]
然后你可以做 $.each。 希望这是你想要的。
【讨论】:
一个伟大而简单的解决方案。它工作得很好,谢谢! - 我尝试做类似的事情,但没有任何结果 - 也有一个很好的解释:)【参考方案2】:幸运的是,您的 time
属性的格式使这变得容易 - 只需调用 sort
并使用 localeCompare
检查哪个 .time
先出现,假设它们始终采用 YYYY-MM-DD hh:mm:ss
格式:
var messages = [
contact_name: "Josef Braga",
time: "2018-12-20 01:53:49",
isRead: 1,
,
contact_name: "289-1445",
time: "2017-12-20 02:53:49",
isRead: 0,
,
contact_name: "289-1445",
time: "2018-12-20 02:45:49",
isRead: 0,
,
contact_name: "289-1445",
time: "2018-12-20 03:01:49",
isRead: 0,
,
contact_name: "289-1445",
time: "2018-12-20 02:53:49",
isRead: 0,
,
];
messages.sort((a, b) => b.time.localeCompare(a.time));
console.log(messages);
【讨论】:
此解决方案还解决了我的问题,但也解决了它。谢谢!以上是关于如何按日期对 $.each() 函数进行排序的主要内容,如果未能解决你的问题,请参考以下文章