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

如何用JSLT实现姓名聚合日期身高数据及扩展可行性?

JSLT分组聚合解决方案

1. 用JSLT实现分组聚合的正确写法

你之前的模板因为循环中同名key会被覆盖,所以只保留了每组最后一条数据。要实现按name分组并保留所有date-height键值对,结合JSLT内置的group-by和merge函数就能解决:

{
  for (group-by(., .name) as $group)
    $group.key: merge(for ($group.items) {.date: .height})
}

逻辑说明:

  • group-by(., .name):将原始数组按name字段分组,得到包含key(分组的name值)和items(该分组下的所有原始对象)的分组集合。
  • 遍历每个分组时,先用for ($group.items) {.date: .height}把分组内的每个对象转成{date: height}的小对象,再用merge函数把这些小对象合并成一个大对象,这样同name下的所有date-height键值对都会被保留(如果存在重复date,merge会保留最后出现的那条数据)。

2. 已引入JSLT的代码库中是否需要扩展?

完全不需要额外扩展,直接用上述模板就能解决问题。JSLT内置的group-by和merge函数已经覆盖了这个需求的所有逻辑,直接替换你原来的模板即可。

如果你的代码库有复用这类分组逻辑的需求,也可以封装自定义函数。比如在Java集成JSLT的场景下,你可以注册一个自定义函数,把分组聚合的逻辑封装进去,之后在模板里直接调用这个函数就行,但这属于优化场景,不是必须的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:28:10