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

如何在Mule DataWeave中实现多数组连续迭代计数?

实现DataWeave中跨map迭代的全局连续计数器

问题背景

使用DataWeave的map函数遍历数组时,内置迭代计数器$$仅在当前map范围内有效,每次新的map调用后会重置为0。需要实现全局连续递增的计数,让外层数组和内层子数组的计数依次衔接、无中断。

请求负载

[
    {
        "id": 1
    },
    {
        "id": 2
    },
    {
        "id": 3
    },
    {
        "id": 4
    }
]

期望输出

{
  "products": [
    {
      "iterater": 1,
      "child": [
        {
          "childIterater": 2
        },
        {
          "childIterater": 3
        },
        {
          "childIterater": 4
        },
        {
          "childIterater": 5
        }
      ]
    },
    {
      "iterater": 6,
      "child": [
        {
          "childIterater": 7
        },
        {
          "childIterater": 8
        },
        {
          "childIterater": 9
        },
        {
          "childIterater": 10
        }
      ]
    },
    {
      "iterater": 11,
      "child": [
        {
          "childIterater": 12
        },
        {
          "childIterater": 13
        },
        {
          "childIterater": 14
        },
        {
          "childIterater": 15
        }
      ]
    },
    {
      "iterater": 16,
      "child": [
        {
          "childIterater": 17
        },
        {
          "childIterater": 18
        },
        {
          "childIterater": 19
        },
        {
          "childIterater": 20
        }
      ]
    }
  ]
}

解决方案

通过计算元素的全局位置生成连续计数,无需依赖局部的$$计数器。核心思路是根据外层索引和内层索引,推导每个计数的全局值:

%dw 2.0
output application/json
var inputSize = sizeOf(payload)
// 每个外层元素占用的总计数:1个自身 + inputSize个子元素
var perOuterItemCount = inputSize + 1
---
{
    products: payload map ((outerItem, outerIdx) -> {
        iterater: (outerIdx * perOuterItemCount) + 1,
        child: payload map ((innerItem, innerIdx) -> {
            childIterater: (outerIdx * perOuterItemCount) + 2 + innerIdx
        })
    })
}

代码说明

  1. inputSize:获取输入数组的长度(示例中为4),用于计算每个外层元素需要占用的计数位数
  2. perOuterItemCount:每个外层元素对应的总计数数量,即自身1个加上子元素的inputSize个,示例中为5
  3. 外层iterater计算:(outerIdx * perOuterItemCount) + 1,外层索引从0开始,依次得到1、6、11、16
  4. 内层childIterater计算:在当前外层元素的起始计数基础上,从2开始累加内层索引,确保子元素计数连续衔接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:37:47