Dela via


Lambda-funktioner för Bicep

Den här artikeln beskriver lambda-funktionerna som ska användas i Bicep. Lambda-uttryck (eller lambda-funktioner) är i huvudsak kodblock som kan skickas som ett argument. De kan ta flera parametrar, men är begränsade till en enda kodrad. I Bicep är lambda-uttrycket i det här formatet:

<lambda variable> => <expression>

Kommentar

Lambda-funktionerna stöds endast i Bicep CLI version 0.10.X eller senare.

Begränsningar

Funktionen Bicep lambda har följande begränsningar:

  • Lambda-uttryck kan bara anges direkt som funktionsargument i dessa funktioner: filter(), groupBy(), map(), mapValues(), reduce(), sort()och toObject().
  • Användning av lambda-variabler (de tillfälliga variabler som används i lambda-uttrycken) i resurs- eller modulmatrisåtkomst stöds inte för närvarande.
  • Det finns för närvarande inte stöd för att använda lambda-variabler i listKeys funktionen.
  • Det finns för närvarande inte stöd för att använda lambda-variabler i referensfunktionen .

filter

filter(inputArray, lambda expression)

Filtrerar en matris med en anpassad filtreringsfunktion.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
inputArray Ja matris Matrisen som ska filtreras.
lambda-uttryck Ja Uttryck Lambda-uttrycket tillämpas på varje indatamatriselement. Om resultatet är sant inkluderas objektet i utdatamatrisen. annars tas objektet bort.

Returvärde

En matris.

Exempel

I följande exempel visas hur du filter använder funktionen.

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')

Utdata från föregående exempel:

Namn Typ Värde
oldDogs Matris [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]
dogNameIndex Matris [{"name":"Casper","age":3,"interests":["Other dogs"]}]

oldDogs listar de hundar som är fem eller äldre; dogNameIndex identifierar de hundar vars indexnummer är mindre än två och vars namn börjar med bokstaven "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)

Utdata från föregående exempel:

Namn Typ Värde
filteredLoop Matris [6, 7, 8, 9]
isEven Matris [0, 2, 4, 6, 8]

filterdLoop visar talen i en matris som är större än 5, och isEven visar jämna tal i matrisen.

groupBy

groupBy(inputArray, lambda expression)

Skapar ett objekt med matrisvärden från en matris med hjälp av ett grupperingsvillkor.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
inputArray Ja matris Matrisen för gruppering.
lambda-uttryck Ja Uttryck Lambda-uttrycket tillämpas på varje indatamatriselement och grupperar elementen med hjälp av grupperingsvillkoret.

Returvärde

Ett objekt.

Exempel

I följande exempel visas hur du groupBy använder funktionen.

var inputArray = ['foo', 'bar', 'baz']

output outObject object = groupBy(inputArray, x => substring(x, 0, 1)) 

Utdata från föregående exempel:

Namn Typ Värde
outObject Objekt {"f":["foo"],"b":["bar","baz"]}

outObject visar ett objekt som grupperar matriselementen med sina första bokstäver.

map

map(inputArray, lambda expression)

Tillämpar en anpassad mappningsfunktion på varje element i en matris.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
inputArray Ja matris Matrisen som ska mappas.
lambda-uttryck Ja Uttryck Lambda-uttrycket som tillämpas på varje indatamatriselement för att generera utdatamatrisen.

Returvärde

En matris.

Exempel

I följande exempel visas hur du map använder funktionen.

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

Utdata från föregående exempel är:

Namn Typ Värde
dogNames Matris ["Evie","Casper","Indy","Kira"]
sayHi Matris ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"]
mapArray Matris [{"i":0,"hund":"Evie","hälsning":"Ahoy, Evie!"},{"i":1,"hund":"Casper","hälsning":"Ahoy, Casper!"},{"i":2,"hund":"Indy","hälsning":"Ahoy, Indy!"},{"i":3,"hund":"Kira","hälsning":"Ahoy, Kira!}]
mapArrayIndex Matris [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}]

dogNames visar hundnamnen från matrisen med objekt; sayHi sammanfogar "Hello" och vart och ett av hundnamnen; mapArray och mapArrayIndex skapar ytterligare två matriser med objekt.

mapValues

mapValues(inputObject, lambda expression)

Skapar ett objekt från ett indataobjekt med hjälp av ett lambda-uttryck för att mappa värden.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
inputObject Ja objekt Objektet som ska mappas.
lambda-uttryck Ja Uttryck Lambda-uttrycket som används för att mappa värdena.

Returvärde

Ett objekt.

Exempel

I följande exempel visas hur du mapValues använder funktionen.

var inputObject = { foo: 'foo', bar: 'bar' }

output mapObject object = mapValues(inputObject, val => toUpper(val)) 

Utdata från föregående exempel är:

Namn Typ Värde
mapObject Objekt {foo: 'FOO', bar: 'BAR'}

mapObject skapar ett annat objekt med värdena i versaler.

Minska

reduce(inputArray, initialValue, lambda expression)

Minskar en matris med en anpassad reduce-funktion.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
inputArray Ja matris Matrisen som ska minskas.
initialValue Ja någon Ursprungligt värde.
lambda-uttryck Ja Uttryck Lambda-uttrycket som används för att aggregera det aktuella värdet och nästa värde.

Returvärde

Någon.

Exempel

I följande exempel visas hur du reduce använder funktionen.

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)

Utdata från föregående exempel är:

Namn Typ Värde
totalAge heltal 18
totalAgeAdd1 heltal 19
oddAge heltal 7

totalAge summerar hundarnas ålder; totalAgeAdd1 har ett initialt värde på 1 och lägger till alla hundåldrarna till de inledande värdena. oddAge summerar åldrarna på hundar som finns vid jämna index, särskilt 5 (Evie) och 2 (Indy).

output reduceObjectUnion object = reduce([
  { foo: 123 }
  { bar: 456 }
  { baz: 789 }
], {}, (cur, next) => union(cur, next))

Utdata från föregående exempel är:

Namn Typ Värde
reduceObjectUnion objekt {"foo":123,"bar":456,"baz":789}

Union-funktionen returnerar ett enskilt objekt med alla element från parametrarna. Funktionsanropet unioniserar nyckelvärdeparen för objekten till ett nytt objekt.

sortera

sort(inputArray, lambda expression)

Sorterar en matris med en anpassad sorteringsfunktion.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
inputArray Ja matris Matrisen som ska sorteras.
lambda-uttryck Ja Uttryck Lambda-uttrycket som används för att jämföra två matriselement för beställning. Om det är sant sorteras det andra elementet efter det första i utdatamatrisen.

Returvärde

En matris.

Exempel

I följande exempel visas hur du sort använder funktionen.

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)

Utdata från föregående exempel sorterar hundobjekten från den yngsta till den äldsta:

Namn Typ Värde
dogsByAge Matris [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]

toObject

toObject(inputArray, lambda expression, [lambda expression])

Konverterar en matris till ett objekt med en anpassad nyckelfunktion och valfri funktion för anpassat värde. Se objekt om att konvertera ett objekt till en matris.

Namnområde: sys.

Parametrar

Parameter Obligatoriskt Type Beskrivning
inputArray Ja matris Matrisen som används för att skapa ett objekt.
lambda-uttryck Ja Uttryck Lambda-uttrycket som används för att ange nyckelpredikatet.
lambda-uttryck Nej Uttryck Lambda-uttrycket som används för att ange värdepredikatet.

Returvärde

Ett objekt.

Exempel

I följande exempel visas hur du toObject använder funktionen med de två obligatoriska parametrarna:

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)

Föregående exempel genererar ett objekt baserat på en matris.

Namn Typ Värde
dogsObject Objekt {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interests":["Other dogs"]},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":{"name":"Kira","age":8,"interests":["Rubs"]}}

Följande toObject funktion med den tredje parametern ger samma utdata.

output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)

I följande exempel visas hur du toObject använder funktionen med tre parametrar.

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)

Föregående exempel genererar ett objekt baserat på en matris.

Namn Typ Värde
dogsObject Objekt {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}}

Nästa steg