作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个参数如下,它是一个带有嵌套内部数组的数组
"parameters": {
"input": {
"type": "array",
"defaultValue": [
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"innerArray": {
"value": [
{
"principalId": "id1",
"role": "Viewer"
},
{
"principalId": "id2",
"role": "Ingestor"
}
]
}
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"innerArray": {
"value": [
{
"principalId": "id3",
"role": "Viewer"
},
{
"principalId": "id4",
"role": "Ingestor"
}
]
}
}
]
}
}
是否可以通过扩展innerArrays来创建一个数组变量,如下所示?这背后的背景是ARM似乎不直接支持嵌套复制,所以我尝试通过扩展来解决它。
[
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id1",
"role": "Viewer"
},
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id2",
"role": "Ingestor"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id3",
"role": "Viewer"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id4",
"role": "Ingestor"
}
]
我不知道该怎么做
最佳答案
因为您已使用 azure-bicep
标记了此问题,所以我觉得您可以使用这些函数来帮助您解决问题:
Applies a custom mapping function to each element of an array.
Takes an array of arrays, and returns an array of subarray elements, in the original order. Subarrays are only flattened once, not recursively.
这对我有用:
// main.bicep
param input array
output flatten array = flatten(map(input, cluster => map(cluster.innerArray.value, inner => {
clusterName: cluster.clusterName
databaseName: cluster.databaseName
principalId: inner.principalId
role: inner.role
})))
等效的 ARM (az bicep build --file main.bicep
) 看起来像这样:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"input": {
"type": "array"
}
},
"resources": [],
"outputs": {
"flatten": {
"type": "array",
"value": "[flatten(map(parameters('input'), lambda('cluster', map(lambdaVariables('cluster').innerArray.value, lambda('inner', createObject('clusterName', lambdaVariables('cluster').clusterName, 'databaseName', lambdaVariables('cluster').databaseName, 'principalId', lambdaVariables('inner').principalId, 'role', lambdaVariables('inner').role))))))]"
}
}
}
并给出这个结果:
[
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id1",
"role": "Viewer"
},
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id2",
"role": "Ingestor"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id3",
"role": "Viewer"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id4",
"role": "Ingestor"
}
]
关于Azure ARM 模板 : Is there a way expand a two layer nest-array into one layer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76570133/
我是一名优秀的程序员,十分优秀!