Функции коллекций
|
В данном разделе при описании функций приняты следующие обозначения:
|
Функции для работы с коллекциями предоставляют набор операций для манипуляции массивами и объектами.
Функции извлечения данных
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" ]
Была ли полезна эта страница?