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

如何使用jq获取两个字符串数组的交集值?

用JQ找出第二个数组中存在于第一个数组的元素

要实现你需要的效果——筛选出arr2中同时存在于arr1的元素,可以用以下两种JQ方法:

方法一:使用IN操作符

直接遍历arr2,筛选出存在于arr1中的元素:

jq --null-input '["b", "d", "1"] | map(select(IN(["a", "b", "c"][])))'

执行后返回结果:

[
  "b"
]

原理:IN(["a", "b", "c"][])检查当前元素是否属于arr1的任意值,select保留符合条件的元素,map将结果整理为数组。

方法二:利用哈希集合提升效率(适合大数组)

如果数组元素数量较多,先把arr1转为哈希集合(以数组元素为键的对象),再筛选arr2的元素会更高效:

jq --null-input '
  ($arr1 | {($arr1[]): true}) as $set
  | $arr2 | map(select($set[.]))
' --argjson arr1 '["a", "b", "c"]' --argjson arr2 '["b", "d", "1"]'

原理:先将arr1转换为{"a":true, "b":true, "c":true}形式的对象,再通过$set[.]判断arr2的元素是否是对象的键,以此确认元素是否存在于arr1中。

你之前使用的-操作符是计算arr1与arr2的差集(即arr1中独有的元素),而上述方法是计算两个数组的交集且仅保留arr2中的对应元素,正好匹配你的需求。

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:06