Вы не понимаете, что делает in/1
.Это не проверка, является ли значение членом массива, а скорее, является ли значение членом ключей объекта.Таким образом, для массивов ожидаются числа (индексы) или для объектов - строки (ключи).Это точно так же, как has/1
, но входы меняются местами.
$ jq -n '[0,-1,20,9,16,10] | map(in([range(20;30)]))' # 10 item array
[
true,
false,
false,
true,
false,
false
]
$ jq -n '["foo","bar"] | map(in({foo:1,boo:2,bat:3}))'
[
true,
false
]
Если вы хотите проверить членство в массиве, встроенного элемента нет, но вы можете создать его самостоятельно.Хотя contains/1
близко, но не совсем, так как он проверяет, являются ли строки подстроками и не равны.any/2
может быть использовано для этого.
def has_value($value):
any(.[]; . == $value);
def in_array($arr): # swapped input version
. as $value | any($arr[]; . == $value);