You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按日期升序排序含Date对象的JavaScript类实例数组?

解决按Date属性升序排序数组的问题

首先,你当前使用的ultraarr.sort()是默认的字符串排序逻辑,完全不适用于Date对象的比较。要实现按dates属性升序排序,我们需要给sort()方法传入一个自定义的比较函数。

正确的排序实现

Date对象在参与减法运算时,会自动转换为对应的时间戳(从1970年1月1日至今的毫秒数),因此我们可以直接通过减法来比较两个Date对象的先后顺序:

// 按dates属性升序排序(越早的日期排在前面)
ultraarr.sort((a, b) => a.dates - b.dates);

如果你想显式使用valueOf()方法(它返回的就是Date对象对应的时间戳),也可以写成:

ultraarr.sort((a, b) => a.dates.valueOf() - b.dates.valueOf());

优化代码逻辑

另外,注意到你把sort()放在了循环内部,这会导致每次循环都重新排序数组,非常低效。正确的做法是先完成数组排序,再进行循环渲染:

// 先排序数组
ultraarr.sort((a, b) => a.dates - b.dates);
// 再循环渲染内容
for (let i = 0; i < ultraarr.length; i++) {
  $("row").append(ultraarr[i].display());
}

原理说明

当比较函数返回负数时,sort()会将a放在b的前面;返回正数时则相反;返回0则保持两者的相对位置。因为更早的Date对象对应的时间戳数值更小,所以a.dates - b.dates得到负数时,说明a的日期更早,会被排在前面,正好符合升序排序的需求。

内容的提问来源于stack exchange,提问作者Tomerson Jefferson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:37:55