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

如何将时长字符串列表按实际时间长度排序而非字母序?

按实际时长排序时间字符串列表

要实现按实际时间长度排序,核心是将每个时长字符串转换为统一的时间单位(比如小时),再基于转换后的数值排序。具体实现如下:

步骤说明

  1. 定义单位换算规则:覆盖单复数形式,确保不同表述的时长能正确转换
  2. 编写解析函数:提取字符串中的数字和单位,计算总小时数
  3. 替换排序逻辑:用自定义比较函数替代原有的字母序排序

完整代码

// 单位与小时的换算映射,兼容单复数
const unitConversion = {
  hour: 1,
  hours: 1,
  day: 24,
  days: 24,
  week: 168,
  weeks: 168
};

// 将时长字符串转换为总小时数
const calculateTotalHours = (durationStr) => {
  const [, numStr, unit] = durationStr.match(/(\d+) (\w+)/) || [];
  if (!numStr || !unit) return 0;
  return parseInt(numStr, 10) * (unitConversion[unit] || 0);
};

// 获取去重后的时长列表并按实际时长排序
const durations = [...new Set(this.courses.map(item => item.fields.duration))]
  .sort((a, b) => calculateTotalHours(a) - calculateTotalHours(b));

代码解释

  • unitConversion 处理了单复数单位(如day和days都对应24小时),避免格式差异导致的转换错误
  • calculateTotalHours 通过正则表达式提取数字和单位,计算出该时长对应的总小时数
  • 先通过Set去重,再使用sort比较两个时长的总小时数,实现从小到大的实际时长排序

测试原列表['1 day', '2 days', '2 weeks', '3 days', '3 hours', '4 days'],排序后将得到期望结果:['3 hours', '1 day', '2 days', '3 days', '4 days', '2 weeks']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:57:34