You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按字符串中的日期段对二维数组进行排序

按字符串中的日期字段排序二维数组

问题场景

我有如下格式的二维数组:

[
  ["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()方法,在排序回调里完成日期提取与比较:

  1. 提取日期字符串:用split('-')分割每个元素的字符串,取最后一段并去除首尾空格,得到纯净的日期时间内容;
  2. 转成可比较的日期对象:将提取的日期字符串转为Date对象,利用时间戳实现数值化比较;
  3. 编写排序回调:在回调中返回两个日期对象的差值,实现升序排序。

代码示例(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:40:02