Функции коллекций
В данном разделе при описании функций приняты следующие обозначения:
|
Функции для работы с коллекциями предоставляют набор операций для манипуляции массивами и объектами.
Функции извлечения данных
includes
Определяет, включает ли массив value
указанный элемент element
.
Спецификация функции
includes(value: <массив>, element: <любой тип>) :: <логическое значение>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив |
Массив. |
да |
|
|
любое |
Элемент для проверки. |
да |
Пример
Массив включает указанный элемент
includes(["apple", "orange", "banana"], "banana")
true
keys
Возвращает ключи переданного в функцию объекта.
Спецификация функции
keys(value: <объект>) :: <массив>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Объект, из которого нужно извлечь ключи. |
да |
Пример
Получение ключей из объекта
keys({"key1": "val1", "key2": "val2"})
[ "key1", "key2" ]
length
Возвращает длину value
. Результат зависит от типа value
:
-
для массива возвращает количество элементов;
-
для объекта возвращает количество ключей на верхнем уровне;
-
для строки возвращает количество байтов в строке. Если нужно получить количество символов, используйте функцию
strlen
.
Спецификация функции
length(value: <массив | объект | строка>)
:: <целое число>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив объект строка |
Массив, объект или строка. |
да |
Примеры
Длина объекта
length({
"portland": "Trail Blazers",
"seattle": "Supersonics"
})
2
Длина объекта со вложенными объектами
length({
"home": {
"city": "Portland",
"state": "Oregon"
},
"name": "Trail Blazers",
"mascot": {
"name": "Blaze the Trail Cat"
}
})
3
Длина массива
length(["Trail Blazers", "Supersonics", "Grizzlies"])
3
Длина строки
length("The Planet of the Apes Musical")
30
values
Возвращает значения из переданного объекта.
Чтобы получить срез массива, используйте функцию slice .
|
Спецификация функции
values(value: <объект>)
:: <массив>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Объект, из которого извлекаются значения. |
да |
Пример
Получение значений из объекта
values({"key1": "val1", "key2": "val2"})
[ "val1", "val2" ]
Функции фильтрации
compact
Сжимает value
, то есть удаляет пустые элементы. В аргументах функции можно указать, какие значения следует считать пустыми.
Спецификация функции
compact(value: <массив | объект>, [recursive: <логическое значение>, null: <логическое значение>, string: <логическое значение>, object: <логическое значение>, array: <логическое значение>, nullish: <логическое значение>]) :: <массив | объект>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив объект |
Объект или массив для сжатия. |
да |
|
|
логическое значение |
Будет ли сжатие рекурсивным, то есть удаляются ли пустые элементы вложенных объектов и массивов. |
|
нет |
|
логическое значение |
Рассматривается ли |
|
нет |
|
логическое значение |
Рассматривается ли пустая строка как пустое значение. |
|
нет |
|
логическое значение |
Рассматривается ли объект без элементов как пустое значение. |
|
нет |
|
логическое значение |
Рассматривается ли массив без элементов как пустое значение. |
|
нет |
|
логическое значение |
Рассматриваются ли "нулевые" значения, которые определены функцией |
|
нет |
Примеры
Сжатие массива
compact(["foo", "bar", "", null, [], "buzz"], string: true, array: true, null: true)
[ "foo", "bar", "buzz" ]
Сжатие объекта
compact({"field1": 1, "field2": "", "field3": [], "field4": null}, string: true, array: true, null: true)
{ "field1": 1 }
filter
Отбирает элементы из коллекции.
Эта функция не поддерживает рекурсивную итерацию.
Функция использует синтаксис замыкания для доступа к ключу и значению или индексу и значению каждого элемента в коллекции.
К блокам замыкания применяются те же правила области видимости, что и к обычным блокам. Они могут использовать любые переменные, определенные в родительских областях видимости, а также сохранять изменения в этих переменных. Однако любые новые переменные, созданные внутри блока замыкания, недоступны за его пределами. |
Спецификация функции
filter(value: <массив | объект>) -> |<переменная ключа или индекса>, <переменная значения>| { <блок> } :: <массив | объект>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив объект |
Массив или объект для фильтрации. |
да |
Пример
Фильтрация элементов
filter(array!(.tags)) -> |_index, value| {
# Оставить элементы, которые не равны "foo".
value != "foo"
}
[ "bar", "baz" ]
rv_coalesce_nullish
Возвращает первый элемент массива, значение которого не является "nullish", то есть первый элемент со значимым содержанием. Значениями "nullish" считаются следующие:
-
null
; -
"-"
; -
состоящие только из пробелов, то есть символов со свойством Unicode
White_Space
.
Если все значения в массиве являются "nullish", функция возвращает null
.
Спецификация функции
rv_coalesce_nullish(value: <массив>)
:: <любой тип>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив |
массив, в котором производится поиск элементов, не являющихся "nullish" |
да |
Ошибки
Функция rv_coalesce_nullish
возвращает ошибку, для которой требуется обработка, если value
не является массивом.
Примеры
Есть и значения "nullish", и значимые
rv_coalesce_nullish([" ", "-", "test"])
"test"
Все элементы имеют значимое содержание
rv_coalesce_nullish(["123132", "test"])
"123132"
Все элементы являются "nullish"
rv_coalesce_nullish(["-", " ", "", null, ""])
null
unique
Возвращает уникальные значения для массива.
Сохраняется только первое вхождение каждого элемента.
Спецификация функции
unique(value: <массив>) :: <массив>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив |
Массив, из которого будут возвращены уникальные элементы. |
да |
Пример
Уникальные значения
unique(["foo", "bar", "foo", "baz"])
[ "foo", "bar", "baz" ]
Функции итерации по элементам коллекции
Чтобы избежать лишних вычислений, старайтесь выносить за пределы цикла все вычисления, не зависящие от него. |
Функция join , объединяющая элементы массива в строку, описана в разделе Функции строк.
|
all
Проверяет, что все элементы value
соответствуют условию, указанному в синтаксисе замыкания
вида |<переменная ключа>, <переменная значения>| { <блок> }
, где:
-
в вертикальные черты заключены аргументы — ключ (для объектов) или индекс (для массивов) и значение элемента;
-
в фигурных скобках указано собственно условие. В условии можно изменять внешние переменные.
Выполнение прекращается при первом значении false
для любого элемента, дальнейшая проверка не производится.
Спецификация функции
all(value: <массив или объект>) -> |<переменная ключа или индекс>, <переменная значения>| { <блок> } :: <логическое значение>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив или объект |
Массив или объект для проверки |
да |
Примеры
Итерация объекта
all({ "a": 1, "b": 2 }) -> |_key, value| { value > 0 }
true
Итерация массива
all([1, 2, 3, 4, 5]) -> |index, value| { value > 0 }
true
any
Проверяет, что хотя бы один элемент value
соответствует условию, указанному в синтаксисе замыкания
вида |<переменная ключа>, <переменная значения>| { <блок> }
, где:
-
в вертикальные черты заключены аргументы — ключ (для объектов) или индекс (для массивов) и значение элемента;
-
в фигурных скобках указано собственно условие. В условии можно изменять внешние переменные.
Выполнение прекращается при первом значении true
для любого элемента, дальнейшая проверка не производится.
Спецификация функции
any(value: <массив или объект>) -> |<переменная ключа или индекс>, <переменная значения>| { <блок> } :: <логическое значение>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив или объект |
Массив или объект для проверки |
да |
Примеры
Итерация объекта
any({ "a": 1, "b": 2 }) -> |_key, value| { value == 2 }
true
Итерация массива
all([1, 2, 3, 4, 5]) -> |index, value| { value == 2 }
true
for_each
Итерирует по коллекции.
В настоящее время функция не поддерживает рекурсивную итерацию.
Функция использует синтаксис замыкания для доступа к идентификатору и значению каждого элемента в коллекции.
К блокам замыкания применяются те же правила области видимости, что и к обычным блокам. Они могут использовать любые переменные, определенные в родительских областях видимости, а также сохранять изменения в этих переменных. Однако любые новые переменные, созданные внутри блока замыкания, недоступны за его пределами. |
Спецификация функции
for_each(value: <массив | объект>) -> |<переменная ключа или индекса>, <переменная значения>| { <блок> } :: <пустое значение>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив объект |
Массив или объект для итерации. |
да |
Примеры
Подсчет элементов
tally = {}
for_each(array!(.tags)) -> |_index, value| {
# Получение текущего подсчета для `value` или установка его в `0`.
count = int(get!(tally, [value])) ?? 0
# Увеличение подсчета для значения на `1`.
tally = set!(tally, [value], count + 1)
}
tally
{ "foo": 2, "bar": 1, "baz": 1 }
map_keys
Отображает ключи объекта.
Если включен параметр recursive
, функция обрабатывает вложенные объекты согласно следующим правилам:
-
Итерация начинается с корневого объекта.
-
Для каждого вложенного объекта:
-
Сначала возвращается ключ самого объекта.
-
Затем происходит рекурсивный вызов функции для объекта, и происходит возврат к пункту 1.
-
Любые изменения, сделанные во вложенном объекте до его рекурсивного вызова, сохраняются.
-
-
Для каждого вложенного массива:
-
Сначала возвращается ключ самого массива.
-
Затем происходит поиск всех объектов внутри массива и применение к каждому из них правил из пункта 2.
-
На практике эти правила означают, что map_keys
с включенным параметром recursive
найдет все ключи в целевом объекте, независимо от того, находятся ли вложенные объекты внутри массивов.
Функция использует синтаксис замыкания для доступа к ключу каждого элемента в объекте.
К блокам замыкания применяются те же правила области видимости, что и к обычным блокам. Они могут использовать любые переменные, определенные в родительских областях видимости, а также сохранять изменения в этих переменных. Однако любые новые переменные, созданные внутри блока замыкания, недоступны за его пределами. |
Спецификация функции
map_keys(value: <объект>, [recursive: <логическое значение>]) -> |<переменная ключа>| { <блок> } :: <объект>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Объект для итерации. |
да |
|
|
логическое значение |
Определяет, следует ли выполнять рекурсивную итерацию по коллекции. |
|
нет |
Примеры
Приведение ключей к верхнему регистру
map_keys(.) -> |key| { upcase(key) }
{ "FOO": "foo", "BAR": "bar" }
Замена точек в ключах на подчеркивания
map_keys(., recursive: true) -> |key| { replace(key, ".", "_") }
{ "labels": { "app_kubernetes_io/name": "mysql" } }
map_values
Отображает значения внутри коллекции.
Если включен параметр recursive
, функция обрабатывает вложенные коллекции согласно следующим правилам:
-
Итерация начинается с корневой коллекции.
-
Для каждой вложенной коллекции:
-
Сначала возвращается сам тип коллекции.
-
Затем происходит рекурсивный вызов функции для коллекции, и происходит возврат к пункту 1 в этом списке.
-
Любые изменения, сделанные в коллекции до ее рекурсивного вызова, сохраняются.
-
Функция использует синтаксис замыкания, чтобы изменить значение каждого элемента в объекте.
К блокам замыкания применяются те же правила области видимости, что и к обычным блокам. Они могут использовать любые переменные, определенные в родительских областях видимости, а также сохранять изменения в этих переменных. Однако любые новые переменные, созданные внутри блока замыкания, недоступны за его пределами. |
Спецификация функции
map_values(value: <массив | объект>, [recursive: <логическое значение>]) -> |<переменная значения>| { <блок> } :: <массив | объект>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив объект |
Коллекция (массив или объект) для итерации. |
да |
|
|
логическое значение |
Определяет, следует ли выполнять рекурсивную итерацию по коллекции. |
|
нет |
Пример
Приведение значений к верхнему регистру
map_values(.) -> |value| { upcase!(value) }
{ "foo": "FOO", "bar": "BAR" }
match_datadog_query
Сопоставляет объект value
с запросом Datadog Search Syntax.
Спецификация функции
match_datadog_query(value: <объект> , query: <строка> )
:: <логическое значение>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Коллекция (объект) |
да |
|
|
строка |
Запрос Datadog Search Syntax |
да |
Примеры
Запрос OR
match_datadog_query({"message": "contains this and that"}, "this OR that")
true
Запрос AND
match_datadog_query({"message": "contains only this"}, "this AND that")
false
Символ подстановки в атрибутах
match_datadog_query({"name": "foobar"}, "@name:foo*")
true
Диапазон тегов
match_datadog_query({"tags": ["a:x", "b:y", "c:z"]}, s'b:["x" TO "z"]')
true
Функции изменения структуры коллекции
chunks
Разбивает value
на части длиной chunk_size
в байтах.
Спецификация функции
chunks(value: <массив | строка>, chunk_size: <целое число>)
:: <массив> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив строка |
Массив байтов или строка для разделения. |
да |
|
|
целое число |
Желаемая длина каждого фрагмента в байтах, не менее 1 байта. Длина может быть ограничена архитектурой хост-платформы. |
да |
Характеристики функции
При делении на фрагменты границы кодовых точек Unicode не соблюдаются.
Ошибки
Функция chunks
может возвращать ошибки, для которых требуется обработка:
-
chunk_size
менее 1 байта. -
chunk_size
слишком велик.
Примеры
Разделение строки на фрагменты
chunks("abcdefgh", 4)
[ "abcd", "efgh" ]
Деление без учета границ кодовой точки Unicode
chunks("ab你好", 4)
[ "ab�", "�好" ]
flatten
Выполняет преобразование value
в представление с одним уровнем.
Спецификация функции
flatten(value: <массив | объект>, [separator: <строка>]) :: <массив | объект>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив объект |
Массив или объект, которые необходимо преобразовать. |
да |
|
|
строка |
Разделитель, используемый для объединения вложенных ключей. |
|
нет |
Примеры
Преобразование массива
flatten([1, [2, 3, 4], [5, [6, 7], 8], 9])
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Преобразование объекта
flatten({
"parent1": {
"child1": 1,
"child2": 2
},
"parent2": {
"child3": 3
}
})
{ "parent1.child1": 1, "parent1.child2": 2, "parent2.child3": 3 }
unflatten
Преобразует value
во вложенное представление. Функция может быть полезна для возвращения плоского объекта, полученного с помощью функции flatten, в исходную форму.
Спецификация функции
unflatten(value: <объект>, [separator: <строка>, recursive: <логическое значение>]) :: <объект>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Массив или объект, которые необходимо преобразовать. |
да |
|
|
строка |
Разделитель, используемый для разделения ключей. |
|
нет |
|
логическое значение |
Требуется ли рекурсивно преобразовывать значения объекта. |
|
нет |
Характеристики
Игнорирование неконсистентных значений ключей
Если у нескольких значений один и тот же ключ является префиксом, значения ключей верхнего уровня вложенности отбрасываются и сохраняется только вложенный объект.
В примере ниже для ключа а
есть два возможных значения — число 3 и объект с ключами b
и c
. При применении функции unflatten
числовое значение отбрасывается, сохраняется только объект.
unflatten({
"a": 3,
"a.b": 2,
"a.c": 4
})
{ "a": { "b": 2, "c": 4 } }
Примеры
Преобразование во вложенное представление
unflatten({
"foo.bar.baz": true,
"foo.bar.qux": false,
"foo.quux": 42
})
{ "foo": { "bar": { "baz": true, "qux": false }, "quux": 42 } }
Рекурсивное преобразование во вложенное представление
unflatten({
"flattened.parent": {
"foo.bar": true,
"foo.baz": false
}
})
{ "flattened": { "parent": { "foo": { "bar": true, "baz": false } } } }
Нерекурсивное преобразование во вложенное представление
unflatten({
"flattened.parent": {
"foo.bar": true,
"foo.baz": false
}
},
recursive: false)
{ "flattened": { "parent": { "foo.bar": true, "foo.baz": false } } }
merge
Обновляет поля в объекте to
на основе содержимого объекта from
. При этом:
-
Поля, которые есть только в одном из объектов, возвращаются в результирующем объекте без изменений.
-
Если поле существует в обоих объектах, значение из объекта
from
заменяет значение из объектаto
. Чтобы объединить при слиянии вложенные поля, используйте параметрdeep=true
.
Спецификация функции
merge(to: <объект>, from: <объект>, [deep: <логическое значение>]) :: <объект>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Объект, в который выполняется слияние. |
да |
|
|
объект |
Объект, из которого выполняется слияние. |
да |
|
|
логическое значение |
Выполняется глубокое слияние, если |
|
нет |
Примеры
Поверхностное слияние объектов
merge(
{
"parent1": {
"child1": 1,
"child2": 2
},
"parent2": {
"child3": 3
}
},
{
"parent1": {
"child2": 4,
"child5": 5
}
})
{ "parent1": { "child2": 4, "child5": 5 }, "parent2": { "child3": 3 } }
Глубокое слияние объектов
merge(
{
"parent1": {
"child1": 1,
"child2": 2
},
"parent2": {
"child3": 3
}
},
{
"parent1": {
"child2": 4,
"child5": 5
}
},
deep: true
)
{ "parent1": { "child1": 1, "child2": 4, "child5": 5 }, "parent2": { "child3": 3 } }
object_from_array
Создает объект из пар "ключ — значение", итерируя либо единый массив массивов, либо два отдельных массива. Ключи, равные null
, игнорируются.
Если указан только один аргумент, он должен представлять собой массив, содержащий массивы с ключом и значением. Вместо пропущенных значений записывается null
.
Если используются два массива, длина результирующего массива равна длине самого короткого входного массива, а все остальные элементы отбрасываются.
Спецификация функции
object_from_array(values: <массив>, [keys: <массив>]) :: <объект> , <error>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив |
Массив значений, или массив входных массивов, если других аргументов не передано. |
да |
|
|
массив |
Массив ключей. Если аргумент не указан, массивы и ключей, и значений должны быть переданы в первом аргументе. |
нет |
Ошибки
Функция object_from_array
может возвращать ошибки, для которых требуется обработка:
-
values
илиkeys
не являются массивами; -
values
является единственным аргументом и содержит элементы, не являющиеся массивами.
Примеры
Создание объекта из массива массивов
object_from_array([["a", 1], [null, 2], ["b"], ["c", true, 3, 4]])
{ "a": 1, "b": null, "c": true }
Создание объекта из отдельных массивов ключей и значений
object_from_array([1, 2, 3, 4, 5], keys: ["one", null, "two"])
{ "one": 1, "two": 3 }
rv_rename_keys
Переименовывает ключи в объекте согласно таблице обогащения.
Спецификация функции
rename_keys(value: <объект>, table: <строка>, from: <строка>, to <строка>, [separator: <строка>, join_separator: <строка>, case_sensitive: <логическое>]) :: <объект> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Объект, в котором нужно переименовать поля. |
да |
|
|
строка |
Таблица обогащения. |
да |
|
|
строка |
Столбец с текущими именами. Строка должна быть представлена литералом, без использования переменных. |
да |
|
|
строка |
Столбец с новыми именами. Строка должна быть представлена литералом, без использования переменных. |
да |
|
|
строка |
Строка, разделяющая части сложных ключей. Строка должна быть представлена литералом, без использования переменных. |
нет |
|
|
строка |
Строка, соединяющая части сложных ключей после переименования. Если параметр не указан, то используется значение Строка должна быть представлена литералом, без использования переменных. |
нет |
|
|
логическое значение |
Указывает, будет ли поиск ключей в таблице обогащения регистрозависимым. Значение должно быть представлено литералом |
|
нет |
Ошибки
Функция rv_rename_keys
может возвращать ошибки, для которых требуется обработка:
-
Не найдена таблица обогащения.
-
Таблица не закодирована в UTF-8.
-
case_sensitive
не является логическим значением. -
from
не является строкой -
to
не является строкой -
separator
не является строкой. -
join_separator
не является строкой. -
Указан
join_separator
без параметраseparator
. -
Не удается разобрать таблицу.
Примеры
rename_keys!(
{ "a/b": 123 },
table: "table_name",
from: "from_value",
to: "to_value",
separator: "/"
)
{ "c/d": 123 }
unnest
Разворачивает поле объекта, которое является массивом. В результате функция возвращает массив объектов. В каждом объекте значением указанного поля будет один из элементов массива, значения остальных полей сохраняются прежними. Это аналог explode в некоторых языках.
Присваивание возвращенного массива корневому пути .
приведет к созданию нескольких событий из remap
.
Спецификация функции
unnest(path: <путь>) :: <массив> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
путь |
Путь к полю, которое нужно развернуть. |
да |
Ошибки
Функция unnest
возвращает ошибку, для которой требуется обработка, если поле, на которое ссылается путь, не является массивом.
Примеры
Развернуть поле
. = {"hostname": "localhost", "events": [{"message": "hello"}, {"message": "world"}]}
. = unnest(.events)
[ { "events": { "message": "hello" }, "hostname": "localhost" }, { "events": { "message": "world" }, "hostname": "localhost" } ]
Развернуть вложенное поле
. = unnest!(.event.messages)
zip
Объединяет элементы из нескольких итерируемых массивов в группы по одному элементу от каждого. Функция возвращает массив массивов, где каждый вложенный массив содержит элементы с одинаковыми индексами из всех входных массивов. Длина результирующего массива равна длине самого короткого входного массива, а все остальные элементы отбрасываются.
Функция аналогична функции zip
в Python, а также методам zip
в Ruby и Rust.
Если указан только один аргумент, он должен представлять собой массив, содержащий все массивы, которые нужно слить.
Спецификация функции
zip(array_0: <массив>, [array_1: <массив>])
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив |
Первый массив элементов, или массив входных массивов, если других аргументов не передано. |
да |
|
|
массив |
Второй массив элементов. Если аргумент не указан, оба массива должны быть переданы в первом аргументе. |
нет |
Ошибки
Функция zip
может возвращать ошибки, для которых требуется обработка:
-
array_0
илиarray_1
не являются массивами; -
array_0
является единственным аргументом и содержит элементы, не являющиеся массивами.
Примеры
Слияние двух массивов разной длины
zip([1, 2, 3], [4, 5, 6, 7])
[[1, 4], [2, 5], [3, 6]]
Слияние трех массивов
zip([[1, 2], [3, 4], [5, 6]])
[[1, 3, 5], [2, 4, 6]]
Функции действий с отдельными элементами
append
Добавляет каждый элемент из массива items
в конец массива value
.
Спецификация функции
append(value: <массив>, items: <массив>)
:: <массив>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив |
Исходный массив |
да |
|
|
массив |
Элементы для добавления |
да |
Пример
Соединение массивов
append([1, 2], [3, 4])
[ 1, 2, 3, 4 ]
del
Удаляет из цели поле, указанное статическим путем path
.
Функция del модифицирует текущее событие и возвращает значение удаленного поля.
|
Чтобы удалить поле по динамическому пути, используйте функцию remove .
|
Спецификация функции
del(path: <путь>, [compact: <логическое значение>])
:: <любой тип>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
путь |
Путь к удаляемому полю. |
да |
|
|
логическое значение |
При значении |
|
нет |
Примеры
Удаление поля
del(.field1)
Переименование поля
.new_field = del(.old_field)
exists
Проверяет, существует ли путь в цели.
Эта функция отличает отсутствующий путь от существующего пути со значением null
. Обычные выражения пути, такие как .foo
, не позволяют различить эти случаи, так как они возвращают значение null
, если путь не существует.
Спецификация функции
exists(path: <путь>)
:: <логическое значение>
Примеры
Проверка существования поля
exists(.field)
true
Проверка существования элемента массива
exists(.array[2])
true
get
Динамически получает значение по указанному пути.
Если точный путь известен, используйте выражение пути, такое как .foo.bar[1] , чтобы получить значение. Используйте функцию get , если имена сегментов пути не известны заранее.
|
Спецификация функции
get(value: <объект | массив>, path: <массив>) :: <любой тип>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект массив |
Объект или массив для запроса. |
да |
|
|
массив |
Массив из сегментов пути для поиска значения. |
да |
Ошибки
Функция get
возвращает ошибку, для которой требуется обработка, если сегмент пути не является строкой или целым числом.
Примеры
Поле верхнего уровня с путем из одного сегмента
get!(value: { "foo": "bar" }, path: ["foo"])
bar
Вложенное поле с путем из нескольких сегментов
get!(value: { "foo": { "bar": "baz" } }, path: ["foo", "bar"])
baz
Индекс массива
get!(value: ["foo", "bar", "baz"], path: [-2])
bar
push
Добавляет item
в конец массива value
.
Спецификация функции
push(value: <массив>, item: <любой тип>) :: <массив>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
массив |
Целевой массив. |
да |
|
|
любое |
Элемент для добавления. |
да |
Примеры
Добавление элемента в массив
push([1, 2], 3)
[ 1, 2, 3 ]
Добавление массива в массив
push([1, 2], [3, 4])
[ 1, 2, [ 3, 4 ] ]
remove
Динамически удаляет значение по указанному пути.
Если точный путь известен, используйте более производительную функцию del с выражением пути, таким как .foo.bar[1] , чтобы удалить значение. Используйте функцию remove , если имена сегментов пути не известны заранее.
|
Спецификация функции
remove(value: <объект | массив>, path: <массив>, [compact: <логическое значение>]) :: <объект | массив>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект массив |
Объект или массив, из которого требуется удалить данные. |
да |
|
|
массив |
Массив сегментов пути для удаления значения. |
да |
|
|
логическое значение |
При значении |
|
нет |
Ошибки
Функция remove
возвращает ошибку, для которой требуется обработка, если сегмент пути не является строкой или целым числом.
Примеры
Удаление значения поля верхнего уровня с путем из одного сегмента
remove!(value: { "foo": "bar" }, path: ["foo"])
{}
Удаление значения вложенного поля с путем из нескольких сегментов
remove!(value: { "foo": { "bar": "baz" } }, path: ["foo", "bar"])
{ "foo": {} }
Удаление по индексу массива
remove!(value: ["foo", "bar", "baz"], path: [-2])
[ "foo", "baz" ]
Удаление со сжатием
remove!(value: { "foo": { "bar": [42], "baz": true } }, path: ["foo", "bar", 0], compact: true)
{ "foo": { "baz": true } }
set
Динамически присваивает значение по указанному пути в объекте или массиве.
Если точный путь известен, используйте присваивание по статическому пути, такое как .foo.bar[1] = true . Используйте функцию set , если имена сегментов пути не известны заранее.
|
Спецификация функции
set(value: <объект | массив>, path: <массив>, data: <любой тип>) :: <объект | массив>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект массив |
Объект или массив для вставки данных. |
да |
|
|
массив |
Массив сегментов пути для вставки значения. |
да |
|
|
любое |
Вставляемые данные. |
да |
Ошибки
Функция set
возвращает ошибку, для которой требуется обработка, если сегмент пути не является строкой или целым числом.
Примеры
Присвоение значения полю верхнего уровня с путем из одного сегмента
set!(value: { "foo": "bar" }, path: ["foo"], data: "baz")
{ "foo": "baz" }
Присвоение значения вложенному полю с путем из нескольких сегментов
set!(value: { "foo": { "bar": "baz" } }, path: ["foo", "bar"], data: "qux")
{ "foo": { "bar": "qux" } }
Массив
set!(value: ["foo", "bar", "baz"], path: [-2], data: 42)
[ "foo", 42, "baz" ]