Функции для работы с объектами в Bicep
В этой статье описаны функции Bicep для работы с объектами.
содержит
contains(container, itemToFind)
Проверяет, содержит ли массив значение, содержит ли объект ключ или содержит ли строка подстроку. При сравнении строк учитывается регистр. Тем не менее при проверке объекта на наличие ключа сравнение выполняется без учета регистра.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
контейнер | Да | массив, объект или строка | Значение, содержащее значение, которое необходимо найти. |
itemToFind | Да | строка или целое число | Значение, которое необходимо найти. |
Возвращаемое значение
True, если элемент найден. В противном случае — False.
Пример
В следующем примере показано, как использовать contains
с разными типами:
param stringToTest string = 'OneTwoThree'
param objectToTest object = {
one: 'a'
two: 'b'
three: 'c'
}
param arrayToTest array = [
'one'
'two'
'three'
]
output stringTrue bool = contains(stringToTest, 'e')
output stringFalse bool = contains(stringToTest, 'z')
output objectTrue bool = contains(objectToTest, 'one')
output objectFalse bool = contains(objectToTest, 'a')
output arrayTrue bool = contains(arrayToTest, 'three')
output arrayFalse bool = contains(arrayToTest, 'four')
Выходные данные из предыдущего примера со значениями по умолчанию:
Имя. | Тип | значение |
---|---|---|
stringTrue | Bool | Истина |
stringFalse | Bool | False |
objectTrue | Bool | Истина |
objectFalse | Bool | False |
arrayTrue | Bool | Истина |
arrayFalse | Bool | False |
empty
empty(itemToTest)
Определяет, является ли массив, объект или строка пустым или пустым.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
itemToTest | Да | массив, объект или строка | Значение, которое необходимо проверить, является ли он пустым или null. |
Возвращаемое значение
Возвращает значение True , если значение пустое или null; в противном случае — false.
Пример
В следующем примере проверяется, является ли массив, объект и строка пустыми или null.
param testArray array = []
param testObject object = {}
param testString string = ''
param testNullString string?
output arrayEmpty bool = empty(testArray)
output objectEmpty bool = empty(testObject)
output stringEmpty bool = empty(testString)
output stringNull bool = empty(testNullString)
Выходные данные из предыдущего примера со значениями по умолчанию:
Имя. | Тип | значение |
---|---|---|
arrayEmpty | Bool | Истина |
objectEmpty | Bool | Истина |
stringEmpty | Bool | Истина |
stringNull | Bool | Истина |
intersection
intersection(arg1, arg2, arg3, ...)
Возвращает из параметров один массив или объект с общими элементами.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
arg1 | Да | массив или объект | Первое значение для поиска общих элементов. |
arg2 | Да | массив или объект | Второе значение для поиска общих элементов. |
дополнительные аргументы | No | массив или объект | Дополнительные значения для поиска общих элементов. |
Возвращаемое значение
Массив или объект с общими элементами.
Пример
В следующем примере показано, как использовать intersection
массивы и объекты:
param firstObject object = {
one: 'a'
two: 'b'
three: 'c'
}
param secondObject object = {
one: 'a'
two: 'z'
three: 'c'
}
param firstArray array = [
'one'
'two'
'three'
]
param secondArray array = [
'two'
'three'
]
output objectOutput object = intersection(firstObject, secondObject)
output arrayOutput array = intersection(firstArray, secondArray)
Выходные данные из предыдущего примера со значениями по умолчанию:
Имя. | Тип | значение |
---|---|---|
objectOutput | Object | {"one": "a", "three": "c"} |
arrayOutput | Массив | ["two", "three"] |
items
items(object)
Преобразует объект словаря в массив. Сведения о преобразовании массива в объект см . в toObject .
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
объект | Да | объект | Объект словаря, который нужно преобразовать в массив. |
Возвращаемое значение
Массив объектов преобразованного словаря. У каждого объекта в массиве есть свойство key
, которое содержит значение ключа для словаря. У каждого объекта также есть свойство value
, которое содержит свойства объекта.
Пример
В следующем примере показано преобразование объекта словаря в массив. Для каждого объекта в массиве создается объект с измененными значениями.
var entities = {
item002: {
enabled: false
displayName: 'Example item 2'
number: 200
}
item001: {
enabled: true
displayName: 'Example item 1'
number: 300
}
}
var modifiedListOfEntities = [for entity in items(entities): {
key: entity.key
fullName: entity.value.displayName
itemEnabled: entity.value.enabled
}]
output modifiedResult array = modifiedListOfEntities
В предыдущем примере возвращаются следующие значения:
"modifiedResult": {
"type": "Array",
"value": [
{
"fullName": "Example item 1",
"itemEnabled": true,
"key": "item001"
},
{
"fullName": "Example item 2",
"itemEnabled": false,
"key": "item002"
}
]
}
В следующем примере показан массив, возвращаемый функцией для работы с элементами.
var entities = {
item002: {
enabled: false
displayName: 'Example item 2'
number: 200
}
item001: {
enabled: true
displayName: 'Example item 1'
number: 300
}
}
var entitiesArray = items(entities)
output itemsResult array = entitiesArray
В примере возвращаются следующие значения:
"itemsResult": {
"type": "Array",
"value": [
{
"key": "item001",
"value": {
"displayName": "Example item 1",
"enabled": true,
"number": 300
}
},
{
"key": "item002",
"value": {
"displayName": "Example item 2",
"enabled": false,
"number": 200
}
}
]
}
В JSON объект представляет собой неупорядоченную коллекцию из нуля или более пар "ключ-значение". Упорядочение может быть разным в зависимости от реализации. Например функция Bicep items() сортирует объекты в алфавитном порядке. В других местах можно сохранить исходное упорядочение. Из-за этого недетерминированного, избегайте принятия каких-либо предположений о упорядочении ключей объектов при написании кода, который взаимодействует с параметрами развертывания и выходными данными.
json
json(arg1)
Преобразовывает допустимую строку JSON в тип данных JSON.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
arg1 | Да | строка | Значение, которое необходимо преобразовать в формат JSON. Строка должна быть правильно отформатированной строкой JSON. |
Возвращаемое значение
Тип данных JSON из указанной строки или пустое значение, если указано значение null.
Замечания
Если необходимо включить значение параметра или переменную в объект JSON, используйте функцию concat для создания строки, передаваемой в функцию.
Пример
Ниже представлен пример использования функции json
. Обратите внимание, что для пустого объекта можно передать значение null.
param jsonEmptyObject string = 'null'
param jsonObject string = '{\'a\': \'b\'}'
param jsonString string = '\'test\''
param jsonBoolean string = 'true'
param jsonInt string = '3'
param jsonArray string = '[[1,2,3]]'
param concatValue string = 'demo value'
output emptyObjectOutput bool = empty(json(jsonEmptyObject))
output objectOutput object = json(jsonObject)
output stringOutput string =json(jsonString)
output booleanOutput bool = json(jsonBoolean)
output intOutput int = json(jsonInt)
output arrayOutput array = json(jsonArray)
output concatObjectOutput object = json(concat('{"a": "', concatValue, '"}'))
Выходные данные из предыдущего примера со значениями по умолчанию:
Имя. | Тип | значение |
---|---|---|
emptyObjectOutput | Логический | Истина |
objectOutput | Object | {"a": "b"} |
stringOutput | Строка | test |
booleanOutput | Логический | Истина |
intOutput | Целое | 3 |
arrayOutput | Массив | [ 1, 2, 3 ] |
concatObjectOutput | Object | { "a": "demo value" } |
length
length(arg1)
Возвращает количество элементов в массиве, символов в строке или свойств корневого уровня в объекте.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
arg1 | Да | массив, строка или объект | Массив, используемый для получения числа элементов, строка, используемая для получения числа символов, или объект, используемый для получения числа свойств корневого уровня. |
Возвращаемое значение
Целое число.
Пример
В следующем примере показано, как использовать length
массив и строку:
param arrayToTest array = [
'one'
'two'
'three'
]
param stringToTest string = 'One Two Three'
param objectToTest object = {
propA: 'one'
propB: 'two'
propC: 'three'
propD: {
'propD-1': 'sub'
'propD-2': 'sub'
}
}
output arrayLength int = length(arrayToTest)
output stringLength int = length(stringToTest)
output objectLength int = length(objectToTest)
Выходные данные из предыдущего примера со значениями по умолчанию:
Имя. | Тип | значение |
---|---|---|
arrayLength | Int | 3 |
stringLength | Int | 13 |
objectLength | Int | 4 |
objectKeys
objectKeys(object)
Возвращает ключи из объекта, где объект является коллекцией пар "ключ-значение".
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
объект | Да | объект | Объект, являющийся коллекцией пар "ключ-значение". |
Возвращаемое значение
Массив объектов .
Пример
В следующем примере показано, как использовать objectKeys
с объектом:
var obj = { a: 1, b: 2 }
output keyArray array = objectKeys(obj)
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
keyArray | Массив | [ "a", "b" ] |
keyArray возвращает список ключей входного объекта.
В JSON объект представляет собой неупорядоченную коллекцию из нуля или более пар "ключ-значение". Упорядочение может быть разным в зависимости от реализации. Например функция Bicep items() сортирует объекты в алфавитном порядке. В других местах можно сохранить исходное упорядочение. Из-за этого недетерминированного, избегайте принятия каких-либо предположений о упорядочении ключей объектов при написании кода, который взаимодействует с параметрами развертывания и выходными данными.
shallowMerge
shallowMerge(inputArray)
Объединяет массив объектов, где объединяются только объекты верхнего уровня. Это означает, что если объединенные объекты содержат вложенные объекты, эти вложенные объекты не объединяются глубоко. Вместо этого они полностью заменяются соответствующим свойством из объекта слияния.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputArray | Да | array | Массив объектов . |
Возвращаемое значение
Объект.
Пример
В следующем примере показано использование shallowMerge
.
var firstArray = [{ one: 'a' }, { two: 'b' }, { two: 'c'}]
var secondArray = [{ one: 'a', nested: {a: 1, nested: {c: 3}} }, { two: 'b', nested: {b: 2}}]
output firstOutput object = shallowMerge(firstArray)
output secondOutput object = shallowMerge(secondArray)
Выходные данные из предыдущего примера со значениями по умолчанию:
Имя. | Тип | значение |
---|---|---|
firstOutput | объект | {"one":"a","two":"c"} |
secondOutput | объект | {"one":"a","nested":{"b":2},"two":"b"b"} |
FirstOutput показывает свойства из объединенных объектов в новый объект. Если имеются конфликтующие свойства (то есть свойства с тем же именем), то свойство из последнего объекта, объединяемого, обычно имеет приоритет.
secondOutput показывает, что мелкое слияние не рекурсивно объединяет эти вложенные объекты. Вместо этого весь вложенный объект заменяется соответствующим свойством из объединяющего объекта.
union
union(arg1, arg2, arg3, ...)
Возвращает из параметров один массив или объект со всеми элементами. Для массивов повторяющиеся значения включаются только один раз. Для объектов повторяющиеся имена свойств включаются только один раз.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
arg1 | Да | массив или объект | Первое значение для объединения элементов. |
arg2 | Да | массив или объект | Второе значение для объединения элементов. |
дополнительные аргументы | No | массив или объект | Дополнительные значения для объединения элементов. |
Возвращаемое значение
Массив или объект.
Замечания
Функция объединения использует последовательность параметров, чтобы определить порядок и значения в результате.
Для массивов эта функция итеративно просматривает каждый элемент в первом параметре и добавляет в результат те из них, которые в нем еще не присутствуют. Затем он повторяет процесс для второго параметра и любых других параметров. Если значение уже включено в результат, сохраняется его прежнее расположение в массиве.
При просмотре объектов к результату добавляются имена и значения свойств из первого параметра. Для последующих параметров к результату добавляются новые имена свойств, если они есть. Если в последующем параметре есть свойство с именем, которое уже встречалось ранее, его значение перезаписывается поверх прежнего. Порядок свойств не гарантируется.
Функция объединения объединяет не только элементы верхнего уровня, но и рекурсивно объединяет все вложенные объекты внутри них. Вложенные значения массива не объединяются. См. второй пример в следующем разделе.
Пример
В следующем примере показано, как использовать union
массивы и объекты:
param firstObject object = {
one: 'a'
two: 'b'
three: 'c1'
}
param secondObject object = {
three: 'c2'
four: 'd'
five: 'e'
}
param firstArray array = [
'one'
'two'
'three'
]
param secondArray array = [
'three'
'four'
'two'
]
output objectOutput object = union(firstObject, secondObject)
output arrayOutput array = union(firstArray, secondArray)
Выходные данные из предыдущего примера со значениями по умолчанию:
Имя. | Тип | значение |
---|---|---|
objectOutput | Object | {"one": "a", "two": "b", "three": "c2", "four": "d", "five": "e"} |
arrayOutput | Массив | ["one", "two", "three", "four"] |
В следующем примере показана возможность глубокого слияния:
var firstObject = {
property: {
one: 'a'
two: 'b'
three: 'c1'
}
nestedArray: [
1
2
]
}
var secondObject = {
property: {
three: 'c2'
four: 'd'
five: 'e'
}
nestedArray: [
3
4
]
}
var firstArray = [
[
'one'
'two'
]
[
'three'
]
]
var secondArray = [
[
'three'
]
[
'four'
'two'
]
]
output objectOutput object = union(firstObject, secondObject)
output arrayOutput array = union(firstArray, secondArray)
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
objectOutput | Object | {"property":{"one":"a","two":"b","three":"c2","four":"d","пять":"e"},"nestedArray":[3,4]} |
arrayOutput | Массив | [["один","два"],["три"],["четыре","два"]] |
Если вложенные массивы были объединены, значение objectOutput.nestedArray будет равно [1, 2, 3, 4], а значение arrayOutput будет [["один", "два", "три"], ["три", "четыре", "два"]].
Следующие шаги
- Описание разделов в файле Bicep приведено в статье Общие сведения о структуре и синтаксисе файлов Bicep.