如何使用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
相关产品推荐
相关产品推荐

