js数组按时间排序(js对象数组自定义排序)

js数组按时间排序(js对象数组自定义排序)

如果我们有一个 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);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论