Mimo to, czego na pewno działa, byłoby bardziej poprawne użycie
contains
. Unikałbym tego użycia, ponieważ może to prowadzić do zamieszania.
index("blue")
to
0
i nie można uznać, że wartość prawdy i może oczekiwać, że zostanie wykluczone z wyników.
Zastanów się nad wykorzystaniem tego filtru zamiast:
select(.items | contains(["blue"]))
Ma to tę dodatkową zaletę, że będzie działać, jeśli chciał przedmiotów z więcej niż jednym meczu, po prostu dodając do tablicy.
Jak zaznaczono w komentarzach, nie jest to poprawne. Ciągi są porównywane przy użyciu dopasowywania podłańcuchowego (tutaj rekurencyjnie używa się contains
).
Z perspektywy czasu, contains
nie działało tak jak myślałem. Korzystanie z index
działa, ale osobiście bym go nie używał. Jest coś o tym, żeby dowiedzieć się, czy przedmiot jest w kolekcji, szukając jego indeksu, który wydaje mi się błędny. Korzystanie z contains
ma dla mnie więcej sensu, ale w świetle tych informacji nie byłoby w tym przypadku idealnym rozwiązaniem.
Oto alternatywa, która powinna działać poprawnie:
select([.items[] == "blue"] | any)
Albo bardziej skalowalny sposób, jeśli chcesz być w stanie dopasować kolejne wartości:
select(.items as $values | ["blue", "yellow"] | map([$values[] == .] | any) | all)
@Tomalak, przepraszam. "Lines of json" jest tym, co powinienem napisać. – K2xL
@ Tomalak, o jaki kod pytasz? Nie ma kodu. – K2xL
Tak, zapomnij. Myliłem się. Usuwam komentarze. – Tomalak