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

Twig多字段数组排序:按updated_at与created_at取最新值排序失效如何解决

问题原因

  • 运算符优先级错误:Twig 中太空船运算符<=>的优先级高于空合并运算符??,原始代码实际执行顺序和预期完全不符,等价于a.updated_at ?? (a.created_at <=> b.updated_at) ?? b.created_at,逻辑完全错误,因此排序不符合预期。
  • 缺少括号约束运算顺序:没有用括号把单条数据的日期取值逻辑包裹,导致优先级混乱。
  • 可选方向问题:如果预期是最新内容排在前面,默认的升序排序方向也需要调整。

修复方案

将单条数据的日期取值逻辑用括号包裹,确保先拿到每条数据的最新日期(优先取updated_at,不存在则回退到created_at)后再做比较。

升序排序(旧内容在前,新内容在后)

{% set list = myArray|sort((a, b) => (a.updated_at ?? a.created_at) <=> (b.updated_at ?? b.created_at)) %}

降序排序(新内容在前,旧内容在后,多数场景的预期效果)

将两个比较项的位置互换即可:

{% set list = myArray|sort((a, b) => (b.updated_at ?? b.created_at) <=> (a.updated_at ?? a.created_at)) %}

额外注意事项

如果你的created_at、updated_at是字符串格式的日期,需要先转成时间戳再比较,避免字符串比较出现异常,示例:

{% set list = myArray|sort((a, b) => (date(b.updated_at ?? b.created_at).timestamp) <=> (date(a.updated_at ?? a.created_at).timestamp)) %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:06:00