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

使用jq修改对象内数组:筛选b属性匹配当前对象a属性的元素

jq数组筛选优化方案

需求说明

现有对象数组,需要对每个对象的b属性数组做筛选,仅保留与当前对象a属性值相等的元素。

示例输入

[
  {
    "a": 3,
    "b": [
      1,
      2,
      3
    ]
  },
  {
    "a": 5,
    "b": [
      3,
      5,
      4,
      3,
      5
    ]
  }
]

期望输出

[
  {
    "a": 3,
    "b": [
      3
    ]
  },
  {
    "a": 5,
    "b": [
      5,
      5
    ]
  }
]

优化实现

你原有的实现逻辑完全正确,这里提供两种更简洁、可读性更高的写法:

写法1:可读性优先(推荐)

使用jq内置map()函数替代手动数组展开封装的语法,语义更清晰:

map(.a as $a | .b |= map(select(. == $a)))

优势:

  • 外层map()直接处理输入数组的每个对象,省去[.[] | ...]的冗余写法
  • 内层b数组的筛选也用map()实现,代码结构更扁平,不需要嵌套额外的方括号
  • 函数语义直白,阅读时可以快速理解是对两层数组分别做转换操作

写法2:极致简短版本

如果需要更短的代码,可以省略部分不必要的空格和括号,效果完全一致:

[.[]|.a as $a|.b|=map(select(.==$a))]

两种写法的输出和你原实现完全相同,性能也没有差异,日常使用更推荐优先选择可读性更好的第一种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:54:02