如何在 JavaScript 中按日期对对象数组进行排序

boyanx1周前技术教程2

如果我们有一个 JavaScript 对象数组,每个对象都包含一个 Date 类型的属性,例如:

const events = [
  { name: 'Birthday', date: new Date('2022-04-23') },
  { name: 'Shopping', date: new Date('2022-04-17') },
  { name: 'Meeting', date: new Date('2022-04-27') },
];

我们如何按日期属性对这些对象进行排序?


数组 sort() 方法

我们可以使用 Array sort() 方法轻松地做到这一点:

events.sort((a, b) => a.date.getTime() - b.date.getTime());

sort 方法将回调函数作为参数。 它使用从此函数返回的值来决定对值进行排序的顺序。

如果回调结果是否定的,则 a 排在 b 之前。

如果结果为正,则 b 排在 a 之前。

如果结果为 0,则两个值的排序顺序保持不变。

这意味着我们可以像这样轻松地按降序对数组进行排序:

events.sort((a, b) => b.date.getTime() - a.date.getTime());


现在,当 b 大于 a 时,结果将是肯定的,这将使 sort() 将 b 放在第一位。


笔记

您还可以通过直接减去 Date 对象来对数组进行排序:

events.sort((a, b) => b.date - a.date);


虽然此方法也有效,但它比使用 getTime() 减法要慢得多。

我们通过单独的 for 循环执行 100 万次,对这两种方法进行了性能比较。 这些是平均结果:

Direct subtraction: 488.675ms
Subtraction with getTime(): 196.909ms


无变异排序

sort() 方法对数组进行就地排序,这意味着它被修改了。 为了防止这种情况,我们可以使用 slice() 方法为排序创建数组的副本:

const sortedEvents = events.slice().sort((a, b) => a.date - b.date);
标签: date.js

相关文章

明查|俄罗斯3月11日正式和世界互联网断开链接?

明查员 胡甄卿 陈蕾速览-近日,网传消息称,俄罗斯3月11日正式和世界互联网断网。在3月11日前,俄罗斯服务器和网域将被迁至俄罗斯本地。-白俄罗斯媒体NEXTA披露的俄罗斯政府文件并未明确称,俄罗斯将...

JS短文:如何确定一个月中有多少天?

转载说明:原创不易,未经授权,谢绝任何形式的转载有时,我们想用 JavaScript 确定一个月中有多少天。在本文中,我们将了解如何使用 JavaScript 确定一个月中的天数。使用纯 JavaSc...

js获取当前时间年月日时分秒,前一天,后一天,一周前,一月前等等

年月日function yearToDay(time) { var y = time.getFullYear(), m = time.getMonth() + 1, d = time.ge...

时间日期处理库——Day.js(js 日期处理)

官网:https://day.js.org/enGithub:https://github.com/iamkun/dayjs1. 安装1.1. 下载下载地址:https://github.com/ia...

图表控件JavaScript Charts v3.20.0发布

JavaScript Charts能满足大部分的开发需求,包括序列图表(列型图,条形图,线型图,面积图,步骤折线图,平滑折线图,蜡烛图,ohlc图),饼图/环形图,雷达图/极区图以及xy图/散点图/气...

拒绝白嫖,开源项目作者删库跑路,数千个应用程序无限输出乱码

机器之心报道编辑:蛋酱、小舟「我删我自己的开源项目代码,需要经过别人允许吗?」几天前,开源库「faker.js」和「colors.js」的用户打开电脑,发现自己的应用程序正在输出乱码数据,那一刻,他们...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。