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

MuleSoft DataWeave优化:按商品组计算总价的更优方案问询

优化DataWeave按商品组计算总价的方案

你当前的实现硬编码了每个商品组的总价计算逻辑,扩展性很差——新增商品组时必须修改代码。下面是更简洁通用的优化方案:

优化后代码

// input
var varinput1 = [
   { "artname": "appelmoes", "artgroup": "groenten", "price": 4.20 },
   { "artname": "rode kool", "artgroup": "groenten", "price": 3.20 },
   { "artname": "tarvo brood", "artgroup": "brood & banket", "price": 1.20 },
   { "artname": "krentebrood", "artgroup": "brood & banket", "price": 0.80 },
   { "artname": "vlaai", "artgroup": "brood & banket", "price": 20.40 },
   { "artname": "beckers frikandellen", "artgroup": "vries", "price": 10.40 },
   { "artname": "magnum ijs", "artgroup": "vries", "price": 4.40 },
]

output application/json skipNullOn="everywhere"
---
varinput1 
    groupBy $.artgroup 
    pluck ((items, groupName) -> {
        // 动态生成总价键名,处理特殊字符并格式化
        (("TotalPrice" ++ groupName replace /[\s&]/ with "" capitalizeEach): items.price reduce ($$ + $))
    })

输出结果

[
  {
    "TotalPriceGroenten": 7.40
  },
  {
    "TotalPriceBroodbanket": 22.40
  },
  {
    "TotalPriceVries": 14.80
  }
]

核心优化点

  • 完全动态化:不再硬编码任何商品组名称,新增/删除商品组时无需修改代码
  • 简化求和逻辑:直接对分组后的price数组用reduce求和,默认初始值为0,无需额外空值判断
  • 键名自动格式化:通过正则替换去掉组名中的空格和&,再用capitalizeEach实现首字母大写,统一键名格式

如果需要和你原输出的TotalPricebroodenBanket完全一致(把"brood & banket"转为"broodenBanket"),可以调整键名生成逻辑为:

(("TotalPrice" ++ (groupName replace " & " with "en" replace /\s/ with "") capitalizeEach): items.price reduce ($$ + $))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:50:37