適用於 Bicep 的匿名函式
本文描述在 Bicep 中使用的匿名函式。 Lambda 運算式 (或匿名函式) 基本上是可以當作引數傳遞的程式碼區塊。 其可以採用多個參數,但僅限於單行程式碼。 在 Bicep 中,Lambda 運算式的格式如下:
<lambda variable> => <expression>
注意
只有 Bicep CLI 0.10.X 版或更新版本才支援 lambda 函式。
限制
Bicep 匿名函式具有下列限制:
- Lambda 運算式只能直接指定為下列函式中的函式引數:
filter()
、map()
、reduce()
、sort()
和toObject()
。 - 目前不支援在資源或模組陣列存取內使用 Lambda 變數 (Lambda 運算式中使用的暫存變數)。
- 目前不支援在
listKeys
函式內使用 Lambda 變數。 - 目前不支援在 reference 函式內使用 Lambda 變數。
篩選器
filter(inputArray, lambda expression)
使用自訂篩選函式篩選陣列。
命名空間:sys (部分機器翻譯)。
參數
參數 | 必要 | 類型 | 描述 |
---|---|---|---|
inputArray | Yes | 陣列 | 要篩選的陣列。 |
Lambda 運算式 | Yes | expression | Lambda 運算式會套用至每個輸入的陣列元素。 如果結果為真,則輸出陣列中將會包含此項目;否則此項目會遭到捨棄。 |
傳回值
陣列。
範例
下列範例顯示如何使用 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 (部分機器翻譯)。
參數
參數 | 必要 | 類型 | 描述 |
---|---|---|---|
inputArray | Yes | 陣列 | 要對應的陣列。 |
Lambda 運算式 | Yes | expression | 套用至每個輸入陣列元素以產生輸出陣列的 Lambda 運算式。 |
傳回值
陣列。
範例
下列範例示範如何使用 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","Kira"] |
sayHi | 陣列 | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapObject | 陣列 | [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!"},{"i":1,"dog":"Casper","greeting":"Ahoy, Casper!"},{"i":2,"dog":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"dog":"Kira","greeting":"Ahoy, Kira!"}] |
dogNames 會顯示物件陣列中的狗名稱;sayHi 會串連 "Hello" 和每個狗名稱;而 mapObject 會建立另一個物件陣列。
reduce
reduce(inputArray, initialValue, lambda expression)
使用自訂 reduce 函式來縮減陣列。
命名空間:sys (部分機器翻譯)。
參數
參數 | 必要 | 類型 | 描述 |
---|---|---|---|
inputArray | Yes | 陣列 | 要縮減的陣列。 |
initialValue | Yes | 任意 | 初始值。 |
Lambda 運算式 | Yes | expression | 用來彙總目前值和下一個值的 Lambda 運算式。 |
傳回值
任何。
範例
下列範例顯示如何使用 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 | object | {"foo":123,"bar":456,"baz":789} |
union 函式會從參數傳回具有所有元素的單一物件。 函式呼叫會將物件的索引鍵值組聯集化為新物件。
sort
sort(inputArray, lambda expression)
使用自訂 sort 函式排序陣列。
命名空間:sys (部分機器翻譯)。
參數
參數 | 必要 | 類型 | 描述 |
---|---|---|---|
inputArray | Yes | 陣列 | 要排序的陣列。 |
Lambda 運算式 | Yes | expression | 用來比較兩個陣列元素以進行排序的 Lambda 運算式。 如果為 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":["Other dogs"]},{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
toObject
toObject(inputArray, lambda expression, [lambda expression])
使用自訂索引鍵函式和選用自訂值函式,將陣列轉換成物件。 如需了解如何將物件轉換為陣列,請參閱項目。
命名空間:sys (部分機器翻譯)。
參數
參數 | 必要 | 類型 | 描述 |
---|---|---|---|
inputArray | Yes | 陣列 | 用於建立物件的陣列。 |
Lambda 運算式 | Yes | expression | 用來提供索引鍵述詞的 Lambda 運算式。 |
Lambda 運算式 | No | expression | 用來提供值述詞的 Lambda 運算式。 |
傳回值
物件。
範例
下列範例示範如何使用 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,"interests":["Other dogs"]},"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":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |
下一步
- 如需其他陣列相關 Bicep 函式,請參閱 Bicep 函式 - 陣列。