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

使用Lodash orderBy无法按日期字段createdDate降序排序

问题根因

  • 存入Firebase的createdDate为dayjs().format()输出的字符串格式,Lodash orderBy对字符串排序时默认按Unicode编码逐字符对比,若DayJS输出的日期字符串并非完整ISO 8601格式(如缺失时区、完整年份信息),会导致排序结果与预期时间顺序不符。
  • 若部分数据的createdDate字段为空、格式与其他条目不一致,也会打乱整体排序逻辑。

修复方案

方案1(推荐)

修改存储逻辑,直接存数值类型的13位毫秒级时间戳,彻底避免字符串排序的兼容问题:
存储时将对应代码修改为:

createdDate: dayjs().valueOf(),

数值类型时间戳的排序与时间顺序完全一致,可直接传入orderBy方法排序,前端展示时也可直接传递给Angular的date管道完成格式化,无需额外转换。

方案2(兼容存量数据)

如果不便修改已入库的历史数据,可在排序阶段主动将createdDate转换为Date类型后再做排序,修改getLeads方法如下:

getLeads(): Observable<LeadModel[]> {
    return this.angularFireDatabase
      .list<LeadModel>(`groups/${this.groupId}/leads`)
      .valueChanges()
      .pipe(map((res) => orderBy(res, item => new Date(item.createdDate), ['desc'])));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:24:02