Given the simplified input:
[
[ "gpu" ],
[ "disk" ]
]
I would like to select the arrays for which the first element is "gpu"
.
I can do it with a simple condition:
map(select(.[0] == "gpu"))
[
[ "gpu" ]
]
But I don't understand what's wrong when I try to use the IN
builtin instead:
map(select(.[0] | IN(["gpu"])))
[]
I'm using jq
1.6
IN/1
is defined as def IN(s): any(s == .; .);
, so map(select(.[0] | IN(["gpu"])))
translates to map(select(.[0] | any(["gpu"] == .; .)))
but .
inside the map
is [ "gpu" ]
, thus .[0]
is "gpu"
, which is not equal to [ "gpu" ]
, and the filter consequently fails.
Instead, compare .[0]
with "gpu"
:
map(select(.[0] | IN("gpu")))
[
[
"gpu"
]
]
Using IN
, however, only makes sense for compacting multiple comparisons. For this single comparison, of course, a simple map(select(.[0] == "gpu"))
would suffice.