загадочное поведение `. [] | = empty` - PullRequest
0 голосов
/ 19 ноября 2018

Насколько я понимаю, использование empty в назначении обновления |= удаляет запись, аналогично del(path), а del(path) также работает в массивах.

Я пытался выборочно удалять и изменять записи массива, и получил странные результаты. Пытаясь понять проблему, я свел код к следующему:

Фильтр : .[]|=empty
Ввод : [0,1,2,3,4,5]
выход
[ 1, 3, 5 ]

Попробуйте онлайн здесь

По-видимому, удаляются только четные индексы массива. Почему?

1 Ответ

0 голосов
/ 20 ноября 2018

Как отмечено в комментарии, обработка jq .[] |= empty менялась с течением времени.Можно ожидать, что для каждого массива A A | (.[] |= empty) даст [], согласно теории, что выражение должно приводить к замене каждого элемента в A на empty.

. В любом случае текущий(jq 1.6) реализация явно неверна, что особенно заметно в этом примере:

jq-1.6 -n  '[0,1,2,3] | (.[] |= if . == 2 then empty else . end)'
[
  0,
  1,
  3,
  null
]

Отчеты об ошибках могут быть отправлены на https://github.com/stedolan/jq/issues

...