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

如何使用dayjs对含时间字段的对象数组按从早到晚排序?

排序异常原因
  • 变量引用错误:你定义的sortTime函数接收的参数是users,但函数内部直接对未传入的shifts变量做排序,没有操作输入的目标数组,导致排序逻辑和数据源不匹配。
  • 排序回调返回值逻辑颠倒:Array.sort的回调规则为:返回负数表示a应该排在b前面,返回正数表示b应该排在a前面,返回0表示二者顺序不变。你当前的逻辑是当a的时间早于等于b时返回1,会把更早的时间往后排,直接导致排序顺序错乱。
  • 相等场景返回值错误:两个时间相等时你返回的是-1而非0,会导致排序不稳定,相同时间的元素顺序出现随机错乱。
修复方案

直接基于dayjs解析后的时间戳做差值计算实现升序排序即可,不需要引入isSameOrBefore扩展,逻辑更简洁稳定:

dayjs.extend(customParseFormat);

const sortTime = (users) => {
  // 先拷贝数组再排序,避免修改原输入数组
  return [...users].sort((a, b) => {
    const aTime = dayjs(a.date, 'h:mm A').valueOf();
    const bTime = dayjs(b.date, 'h:mm A').valueOf();
    return aTime - bTime;
  });
};

注:你预期结果里Elton Smith的date写的是10:30 AM,和原始数组里的10:30 PM不一致属于笔误,上述代码会按原始输入的时间值正确排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:45:03