网站首页 > 知识剖析 正文
如果我们有一个 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);
猜你喜欢
- 2024-12-07 (建议收藏) | 企业中Vue.js最常用的第三方插件
- 2024-12-07 前端基础:JavaScript
- 2024-12-07 SpringBoot @JsonFormat无法接收前端传递的日期字符串
- 2024-12-07 七爪源码:如何在 JavaScript 中从日期中减去 6 个月
- 2024-12-07 JS Date对象的妙用:如何更优雅的计算时间差?
- 2024-12-07 在js中常见的时间格式及其转换
- 2024-12-07 Web前端最强JavaScript Excel处理插件——exceljs
- 2024-12-07 js获取时间戳的几种方式
- 2024-12-07 Axure高保真教程:日期时间下拉列表
- 2024-12-07 JavaScript获取现在时间日期与农历
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)