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


Лямбда-функции для 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"}}

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