如何按字符串中的日期段对二维数组进行排序
按字符串中的日期字段排序二维数组
问题场景
我有如下格式的二维数组:
[ ["123456789 - person@company.com - 02/15/2024 9:00 PM"], ["9876543210 - person2@company.com - 02/13/2024 6:00 AM"], ["1234506789 - person3@company.com - 02/15/2024 7:00 AM"] ]
需要基于每个元素字符串中最后一个“-”之后的日期进行升序排序,预期结果为:
[ ["9876543210 - person2@company.com - 02/13/2024 6:00 AM"], ["1234506789 - person3@company.com - 02/15/2024 7:00 AM"], ["123456789 - person@company.com - 02/15/2024 9:00 PM"] ]
我知道怎么截取字符串和定位字符,但不知道怎么把这个逻辑结合到数组排序里,不知道从哪下手。
实现方案
核心是利用数组的sort()方法,在排序回调里完成日期提取与比较:
- 提取日期字符串:用
split('-')分割每个元素的字符串,取最后一段并去除首尾空格,得到纯净的日期时间内容; - 转成可比较的日期对象:将提取的日期字符串转为
Date对象,利用时间戳实现数值化比较; - 编写排序回调:在回调中返回两个日期对象的差值,实现升序排序。
代码示例(JavaScript)
const data = [ ["123456789 - person@company.com - 02/15/2024 9:00 PM"], ["9876543210 - person2@company.com - 02/13/2024 6:00 AM"], ["1234506789 - person3@company.com - 02/15/2024 7:00 AM"] ]; data.sort((a, b) => { // 提取并转换a元素的日期 const dateA = new Date(a[0].split('-').pop().trim()); // 提取并转换b元素的日期 const dateB = new Date(b[0].split('-').pop().trim()); // 返回差值实现升序,要降序则返回 dateB - dateA return dateA - dateB; }); console.log(data);
关键细节
split('-').pop():确保拿到最后一个“-”之后的内容,不受前面字段的影响;trim():去除日期前后的空格,避免Date对象解析失败;Date对象差值:两个Date相减返回毫秒级时间戳差,正数表示前者时间更晚,完全匹配sort()回调的返回规则。
内容的提问来源于stack exchange,提问作者DanCue
相关产品推荐
相关产品推荐

