【问题标题】:Order divs by date content按日期内容排序 div
【发布时间】:2015-12-11 11:23:28
【问题描述】:

我使用以下函数按日期对 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 问题,它的作用与我大致相同,但没有更快的解决方案。

【问题讨论】:

  • 这是一个服务器端任务。如果您不想让客户端浏览器崩溃。
  • 这个数组的数据首先来自哪里,你不能在那里排序吗?
  • @Rob C 它来自 api 调用,多个具有不同格式的数据被解析出来并创建通用 HTML arrayContent 值。
  • 好的。我认为最好的想法是编写一个服务器端服务,它使用这些 API、整理和排序数据,然后将处理后的内容提供给客户端。
  • 是的,我就是这么想的,我想在生产中处理更大的容量时这是有道理的,不过对于演示来说效果很好! :)

标签: jquery html sorting


【解决方案1】:

如果您想处理数百个元素,这是一项服务器任务。但仅出于测试目的,试试这个小排序功能,它避免使用 jQuery,避免使用拆分方法,避免使用 Date 类,而是使用正则表达式来比较两个数字。我尝试了一百个项目数组,它需要 29.570 毫秒,而原始函数需要 996.119 毫秒。

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);

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 2012-02-22
    • 1970-01-01
    • 2015-06-30
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多