领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

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

nixiaole 2024-12-07 15:52:08 知识剖析 12 ℃

如果我们有一个 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);

Tags:

最近发表
标签列表