Лямбда-функции для Bicep
В этой статье описываются лямбда-функции, используемые в Bicep. Лямбда-выражения (или лямбда-функции) по сути являются блоками кода, которые можно передать в качестве аргумента. Они могут принимать несколько параметров, но ограничены одной строкой кода. В Bicep лямбда-выражение имеет следующий формат:
<lambda variable> => <expression>
Примечание.
Лямбда-функции поддерживаются только в Bicep CLI версии 0.10.X или более поздней.
Ограничения
Лямбда-функция Bicep имеет следующие ограничения:
- Лямбда-выражение можно указать только в качестве аргументов функции в следующих функциях:
filter()
,groupBy()
,map()
,mapValues()
,reduce()
sort()
иtoObject()
. - Использование лямбда-переменных (временных переменных, используемых в лямбда-выражениях) в доступе к ресурсу или массиву модулей в настоящее время не поддерживается.
- Использование лямбда-переменных внутри
listKeys
функции в настоящее время не поддерживается. - Использование лямбда-переменных внутри ссылочной функции в настоящее время не поддерживается.
Фильтр
filter(inputArray, lambda expression)
Фильтрует массив с помощью пользовательской функции фильтрации.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputArray | Да | array | Массив, который нужно отфильтровать. |
лямбда-выражение | Да | выражение | Лямбда-выражение применяется к каждому элементу входного массива. Если результат имеет значение true, элемент включается в выходной массив; в противном случае элемент не карта. |
Возвращаемое значение
Массив объектов .
Примеры
В следующих примерах показано, как использовать функцию filter
.
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Cira'
age: 8
interests: ['Rubs']
}
]
output oldDogs array = filter(dogs, dog => dog.age >=5)
output dogNameIndex array = filter(dogs, (val, i) => i < 2 && substring(val.name, 0, 1) == 'C')
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
oldDogs | Массив | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
dogNameIndex | Массив | [{"name":"Casper","age":3,"interests":["Другие собаки"]}] |
oldDogs перечисляет собак, которые являются пятью или более старыми; dogNameIndex определяет собак, индекс которых меньше двух и имя которого начинается с буквы "C".
var itemForLoop = [for item in range(0, 10): item]
output filteredLoop array = filter(itemForLoop, i => i > 5)
output isEven array = filter(range(0, 10), i => 0 == i % 2)
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
filteredLoop | Массив | [6, 7, 8, 9] |
isEven | Массив | [0, 2, 4, 6, 8] |
filterdLoop показывает числа в массиве, превышающем 5; и isEven отображает четные числа в массиве.
Groupby
groupBy(inputArray, lambda expression)
Создает объект со значениями массива из массива с помощью условия группировки.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputArray | Да | array | Массив для группировки. |
лямбда-выражение | Да | выражение | Лямбда-выражение применяется к каждому элементу входного массива и группировать элементы с помощью условия группировки. |
Возвращаемое значение
Объект.
Примеры
Ниже представлен пример использования функции groupBy
.
var inputArray = ['foo', 'bar', 'baz']
output outObject object = groupBy(inputArray, x => substring(x, 0, 1))
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
outObject | Object | {"f":["foo"],"b":["bar","baz"]} |
outObject показывает объект, который группирует элементы массива по их первым буквам.
map
map(inputArray, lambda expression)
Применяет настраиваемую функцию сопоставления к каждому элементу массива.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputArray | Да | array | Массив для сопоставления. |
лямбда-выражение | Да | выражение | Лямбда-выражение, применяемое к каждому элементу входного массива, для создания выходного массива. |
Возвращаемое значение
Массив объектов .
Пример
Ниже представлен пример использования функции map
.
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
output dogNames array = map(dogs, dog => dog.name)
output sayHi array = map(dogs, dog => 'Hello ${dog.name}!')
output mapArray array = map(range(0, length(dogs)), i => {
i: i
dog: dogs[i].name
greeting: 'Ahoy, ${dogs[i].name}!'
})
output mapArrayIndex array = map(dogs, (x, i) => { index: i, val: x.name})
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
dogNames | Массив | ["Evie", "Casper", "Indy", "Кира"] |
Sayhi | Массив | ["Hello Evie!", "Hello Casper!", "Hello Indy!", "Hello Kira!"] |
mapArray | Массив | [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!"},{"i":1,"dog":"Casper","приветствие":"Ahoy, Casper!"},{"i":2,"собака":"Indy","приветствие":"Ahoy, Indy!"},{"i":"собака":"Кира","приветствие":"Ahoy, Кира!"}] |
mapArrayIndex | Массив | [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}] |
dogNames показывает имена собак из массива объектов; sayHi сцепление "Hello" и каждое из названий собак; mapArray и mapArrayIndex создают еще два массива объектов.
mapValues
mapValues(inputObject, lambda expression)
Создает объект из входного объекта, используя лямбда-выражение для сопоставления значений.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputObject | Да | объект | Объект для сопоставления. |
лямбда-выражение | Да | выражение | Лямбда-выражение, используемое для сопоставления значений. |
Возвращаемое значение
Объект.
Пример
Ниже представлен пример использования функции mapValues
.
var inputObject = { foo: 'foo', bar: 'bar' }
output mapObject object = mapValues(inputObject, val => toUpper(val))
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
mapObject | Object | {foo: 'FOO', bar: 'BAR'} |
mapObject создает другой объект со значениями в верхнем регистре.
reduce
reduce(inputArray, initialValue, lambda expression)
Уменьшает массив с помощью пользовательской функции уменьшения.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputArray | Да | array | Массив для уменьшения. |
initialValue | Да | любое | Начальное значение. |
лямбда-выражение | Да | выражение | Лямбда-выражение, используемое для агрегирования текущего значения и следующего значения. |
Возвращаемое значение
Любой.
Пример
В следующих примерах показано, как использовать функцию reduce
.
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
var ages = map(dogs, dog => dog.age)
output totalAge int = reduce(ages, 0, (cur, next) => cur + next)
output totalAgeAdd1 int = reduce(ages, 1, (cur, next) => cur + next)
output oddAge int = reduce(ages, 0, (cur, next, i) => (i % 2 == 0) ? cur + next : cur)
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
TotalAge | INT | 18 |
totalAgeAdd1 | INT | 19 |
oddAge | INT | 7 |
totalAge суммирует возраст собак; totalAgeAdd1 имеет начальное значение 1, и добавляет все возрасты собаки к начальным значениям. oddAge суммирует возраст собак, расположенных на даже индексах, в частности 5 (Evie) и 2 (Indy).
output reduceObjectUnion object = reduce([
{ foo: 123 }
{ bar: 456 }
{ baz: 789 }
], {}, (cur, next) => union(cur, next))
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
reduceObjectUnion | объект | {"foo":123,"bar":456,"baz":789} |
Функция объединения возвращает один объект со всеми элементами из параметров. Вызов функции связывает пары ключевых значений объектов в новый объект.
sort
sort(inputArray, lambda expression)
Сортирует массив с помощью пользовательской функции сортировки.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputArray | Да | array | Массив для сортировки. |
лямбда-выражение | Да | выражение | Лямбда-выражение, используемое для сравнения двух элементов массива для упорядочивания. Если значение true, второй элемент будет упорядочен после первого в выходном массиве. |
Возвращаемое значение
Массив объектов .
Пример
Ниже представлен пример использования функции sort
.
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
output dogsByAge array = sort(dogs, (a, b) => a.age < b.age)
Выходные данные из предыдущего примера сортируют объекты собаки от самых молодых до самых старых:
Имя. | Тип | значение |
---|---|---|
dogsByAge | Массив | [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Другие собаки"]},{"name" ":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
toObject
toObject(inputArray, lambda expression, [lambda expression])
Преобразует массив в объект с пользовательской ключевой функцией и необязательной функцией пользовательского значения. См . элементы о преобразовании объекта в массив.
Пространство имен: sys.
Параметры
Параметр | Обязательное поле | Type | Описание |
---|---|---|---|
inputArray | Да | array | Массив, используемый для создания объекта. |
лямбда-выражение | Да | выражение | Лямбда-выражение, используемое для предоставления предиката ключа. |
лямбда-выражение | No | выражение | Лямбда-выражение, используемое для предоставления предиката значения. |
Возвращаемое значение
Объект.
Пример
В следующем примере показано, как использовать функцию toObject
с двумя обязательными параметрами:
var dogs = [
{
name: 'Evie'
age: 5
interests: [ 'Ball', 'Frisbee' ]
}
{
name: 'Casper'
age: 3
interests: [ 'Other dogs' ]
}
{
name: 'Indy'
age: 2
interests: [ 'Butter' ]
}
{
name: 'Kira'
age: 8
interests: [ 'Rubs' ]
}
]
output dogsObject object = toObject(dogs, entry => entry.name)
В предыдущем примере создается объект на основе массива.
Имя. | Тип | значение |
---|---|---|
dogsObject | Object | {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"интересы":["Другие собаки"].},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":"name":"Kira","age":8,"interests":["Rubs"]}} |
toObject
Следующая функция с третьим параметром предоставляет одинаковые выходные данные.
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)
В следующем примере показано, как использовать функцию toObject
с тремя параметрами.
var dogs = [
{
name: 'Evie'
properties: {
age: 5
interests: [ 'Ball', 'Frisbee' ]
}
}
{
name: 'Casper'
properties: {
age: 3
interests: [ 'Other dogs' ]
}
}
{
name: 'Indy'
properties: {
age: 2
interests: [ 'Butter' ]
}
}
{
name: 'Kira'
properties: {
age: 8
interests: [ 'Rubs' ]
}
}
]
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry.properties)
В предыдущем примере создается объект на основе массива.
Имя. | Тип | значение |
---|---|---|
dogsObject | Object | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Другие собаки"},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age"::8,"interests":["Rubs"}} |
Следующие шаги
- Дополнительные функции Bicep см. в разделе "Функции Bicep" — массивы для дополнительных функций Bicep.