You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Bicep如何从对象数组提取并合并嵌套peers数组

Bicep提取合并嵌套peers数组并关联vnetid的解决方案

要实现从vnets数组中提取所有嵌套的peers数组,同时为每个peer对象添加所属vnet的vnetid,可以通过Bicep的map和flatten函数组合实现,具体代码如下:

param vnets array = [
  {
    vnetid: 0
    name: '0-test-test'
    addressPrefix: '10.10.74.0/22'
    peers: [
      {
        name: '0-to-1'
        peerToId: 1
      }
    ]
    subnets: [
      {
        name: 'GatewaySubnet'
        addressPrefix: '10.10.74.0/25'
      }
      {
        name: 'AzureFirewallSubnet'
        addressPrefix: '10.10.74.128/25'
      }
    ]
  }
  {
    vnetid: 1
    name: '1-test-test'
    addressPrefix: '10.10.68.0/22'
    peers: [
      {
        name: '1-to-0'
        peerToId: 0
      }
    ]
    subnets: [
      {
        name: 'subnet1'
        addressPrefix: '10.10.68.0/25'
      }
      {
        name: 'subnet2'
        addressPrefix: '10.10.69.0/24'
      }
    ]
  }
]

// 处理生成目标peers数组
var processedPeers = flatten(
  map(vnets, (vnet) => {
    return map(vnet.peers, (peer) => {
      // 将当前vnet的vnetid合并到peer对象中
      return union(peer, { vnetid: vnet.vnetid })
    })
  })
)

// 输出结果验证(可选)
output peers array = processedPeers

代码说明

  1. 外层map遍历vnets数组:逐个处理每个vnet对象
  2. 内层map遍历当前vnet的peers数组:通过union函数将当前vnet的vnetid合并到每个peer对象中
  3. flatten扁平化数组:将内层map生成的二维数组转换为一维数组,得到最终合并后的peers列表

执行后,processedPeers的结构将完全符合期望格式:

[
  {
    vnetid: 0
    name: '0-to-1'
    peerToId: 1
  }
  {
    vnetid: 1
    name: '1-to-0'
    peerToId: 0
  }
]

为什么concat/union单独无法实现

  • concat仅能合并多个数组,但无法为每个peer对象添加关联的vnetid属性
  • union用于合并对象属性,不具备数组遍历和扁平化能力,需要和map、flatten配合完成复杂的数组转换

内容的提问来源于stack exchange,提问作者nelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:52:49