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

如何使用JavaScript按12小时制时间对对象数组排序

12小时制时间对象数组排序方案

直接对12小时制时间字符串做字典序排序无法识别AM/PM的时间语义,会导致排序结果不符合预期。我们可以把每个时间字符串转换为从0点开始计算的总分钟数,以数值为依据做排序即可得到正确结果。
完整实现代码如下:

var array = [
  {"time":"1:00 AM"},
  {"time":"2:15 AM"},
  {"time":"3:00 AM"},
  {"time":"4:30 AM"},
  {"time":"5:00 AM"},
  {"time":"6:00 AM"},
  {"time":"7:00 AM"},
  {"time":"8:00 AM"},
  {"time":"9:00 AM"},
  {"time":"10:00 AM"},
  {"time":"11:00 AM"},
  {"time":"12:00 PM"},
  {"time":"1:00 PM"},
  {"time":"2:00 PM"},
  {"time":"12:00 AM"},
  {"time":"12:15 AM"},
  {"time":"12:30 AM"}
];

// 把12小时制时间转换为0点开始的总分钟数
function convertToTotalMinutes(timeStr) {
  const [timePart, period] = timeStr.split(' ');
  const [hour, minute] = timePart.split(':').map(Number);
  let adjustedHour = hour;
  if (period === 'AM') {
    // AM时段12点对应0点,其他小时保持不变
    adjustedHour = hour === 12 ? 0 : hour;
  } else {
    // PM时段非12点都加12,12点保持不变
    adjustedHour = hour === 12 ? 12 : hour + 12;
  }
  return adjustedHour * 60 + minute;
}

// 自定义排序规则
array.sort((itemA, itemB) => {
  return convertToTotalMinutes(itemA.time) - convertToTotalMinutes(itemB.time);
});

额外说明:

  • 上述代码会直接修改原数组,如果需要保留原数组不变,可以先浅拷贝数组再排序,示例:
    const sortedArray = [...array].sort((a, b) => convertToTotalMinutes(a.time) - convertToTotalMinutes(b.time));
    
  • 代码兼容所有12小时制的时间格式,包括带分钟的非整点时间。

内容的提问来源于stack exchange,提问作者PlutoPlanetStar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:06:03