我有以下函数用于按日期排序我的div数组 -
function sortDates(arrayContent) {
arrayContent.sort(function (a, b) {
var arrDate = $(a).find("#postedDate").text().replace(" posted at: ", "");
var brrDate = $(b).find("#postedDate").text().replace(" posted at: ", "");
var aTime = arrDate.split(' ')[1];
var aDate = arrDate.split(' ')[0];
a = new Date(aDate.split('/')[2], aDate.split('/')[1] - 1, aDate.split('/')[0], aTime.split(':')[0], aTime.split(':')[1]);
var bTime = brrDate.split(' ')[1];
var bDate = brrDate.split(' ')[0];
b = new Date(bDate.split('/')[2], bDate.split('/')[1] - 1, bDate.split('/')[0], bTime.split(':')[0], bTime.split(':')[1]);
return a > b ? -1 : a < b ? 1 : 0;
});
}
arrayContent
=
arrayContent[0] = "<div class="mHr" id="mFID">
<div id="postedDate"> posted at: <b>11/12/2015 11:12:16</b> </div>
</div>" // etc etc
这个当前函数确实有效,但是我希望对数百个div进行排序,使用这种方法的运行时将永远存在。
目前的限制是我在填充arrayContent
之前无法进行日期转换,并且添加到arrayContent
的每个值总是一串HTML,因此我必须找到postedDate
和然后相应地拆分它以创建一个有效的日期变量。
这是我提出的最佳效果,但是如前所述,它非常慢。
我还发现this问题与我的情况大致相同,但没有更快的解决方案。
答案 0 :(得分:1)
如果您想使用数百个作为服务器任务的元素。但仅用于测试目的,尝试这个小排序函数,它避免使用jQuery,避免使用split方法,避免使用Date类并使用正则表达式来比较两个数字。我尝试了一百个项目数组,需要29.570ms,原始功能需要996.119ms。
var reg = /^.*?(\d{2})\/(\d{2})\/(\d{4})\s(\d{2})\:(\d{2})\:(\d{2}).*$/;
function sortDates(a, b){
var numberA = Number( a.replace(reg, "$3$2$1$4$5$6") );
var numberB = Number( b.replace(reg, "$3$2$1$4$5$6") );
return numberA - numberB;
}
arrayContent.sort(sortDates);