Поделиться через


Функции для работы с объектами в 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 будет [["один", "два", "три"], ["три", "четыре", "два"]].

Следующие шаги