Лямбда-функции для Bicep

В этой статье описываются лямбда-функции, используемые в Bicep. Лямбда-выражения (или лямбда-функции) по сути являются блоками кода, которые можно передать в качестве аргумента. Они могут принимать несколько параметров, но ограничены одной строкой кода. В Bicep лямбда-выражение имеет следующий формат:

<lambda variable> => <expression>

Примечание.

Лямбда-функции поддерживаются только в Bicep CLI версии 0.10.X или более поздней.

Ограничения

Лямбда-функция Bicep имеет следующие ограничения:

  • Лямбда-выражение можно указать непосредственно в качестве аргументов функций в следующих функциях: filter(), , map()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: 'Kira'
    age: 8
    interests: ['Rubs']
  }
]

output oldDogs array = filter(dogs, dog => dog.age >=5)

В выходных данных из предыдущего примера показаны собаки, которые являются пятью или более старыми:

Имя. Тип значение
oldDogs Массив [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]
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 отображает четные числа в массиве.

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 mapObject array = map(range(0, length(dogs)), i => {
  i: i
  dog: dogs[i].name
  greeting: 'Ahoy, ${dogs[i].name}!'
})

Выходные данные из предыдущего примера:

Имя. Тип значение
dogNames Массив ["Evie", "Casper", "Indy", "Кира"]
Sayhi Массив ["Hello Evie!", "Hello Casper!", "Hello Indy!", "Hello Kira!"]
mapObject Массив [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!"},{"i":1,"dog":"Casper","приветствие":"Ahoy, Casper!"},{"i":2,"собака":"Indy","приветствие":"Ahoy, Indy!"},{"i":"собака":"Кира","приветствие":"Ahoy, Кира!"}]

dogNames показывает имена собак из массива объектов; sayHi сцепление "Hello" и каждое из имен собак; и 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)

Выходные данные из предыдущего примера:

Имя. Тип значение
TotalAge INT 18
totalAgeAdd1 INT 19

totalAge суммирует возраст собак; totalAgeAdd1 имеет начальное значение 1, и добавляет все возрасты собаки к начальным значениям.

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"}}

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