【问题标题】:DataWeave transform message two arrays with numbersDataWeave 转换消息两个带有数字的数组
【发布时间】:2022-01-03 16:56:56
【问题描述】:

我想将两个数组(如input2)与数字进行比较。如果价格不同约 5% 增加,那么我想发送电子邮件。我试过这样,但它只给出了与相同数字匹配的数字。但是我只想要这个价格,它增加了 5%。

%dw 2.0
output application/json 

var input2 = [{
            "T": "GIK",
            "c": 10.02
       
        },
        {
            "T": "EXTR",
            "c": 4.43
          
        },
        {
            "T": "TANH",
            "c": 2.34
          
        },
        {
            "T": "VSAT",
            "c": 34.24
          
        },
        {
            "T": "KIMpL",
            "c": 25.9102
            
        }]
---
payload.results.c reduce (item, acc = []) -> if (input2.c contains item) acc + item else acc

【问题讨论】:

  • 问题不完全清楚,这可能导致答案不完全符合您的需要。请提供输入有效负载、预期输出、确认价格是属性“c”,以及是否希望其他属性匹配以比较价格。

标签: mule dataweave mulesoft mule-esb


【解决方案1】:

从您的脚本中可以看出,您希望数字(input2 元素的属性 c)与有效负载中相同属性 c 的百分比偏差。如果您只需要比较每个数字与另一个数组中每个数字的百分比,则此脚本会执行此操作。我使用了一个函数来计算百分比差异。

%dw 2.0
output application/json 
import * from dw::core::Arrays
var maxPercentageDifference=5
fun percentageDifference(a,b)=abs(a-b)/((a+b)/2)*100
var input2 = [
    {
        "T": "GIK",
        "c": 10.02
    
    },
    {
        "T": "EXTR",
        "c": 4.43
    },
    {
        "T": "TANH",
        "c": 2.34       
    },
    {
        "T": "VSAT",
        "c": 34.24
    },
    {
        "T": "KIMpL",
        "c": 25.9102
    }
]
---
payload.results.c 
    reduce (item, acc = []) -> if (input2.c some (percentageDifference(item, $) <= maxPercentageDifference)) acc + item else acc

输入:

{
    "results": [
        {
            "T": "GIK",
            "c": 10.05

        },
        {
            "T": "EXTR",
            "c": 4.41
        
        },
        {
            "T": "TANH",
            "c": 8
        
        },
        {
            "T": "VSAT",
            "c": 44
        
        },
        {
            "T": "KIMpL",
            "c": 25.9102
            
        }
    ]
}

输出:

[
  10.05,
  4.41,
  25.9102
]

但是,如果您想在比较值之前匹配属性“T”中的 id,只需将上面的脚本主体更改为:

payload.results 
    filter ((item, index) ->  percentageDifference((input2 firstWith($.T == item.T)).c, item.c) <= maxPercentageDifference )

新输出:

[
  {
    "T": "GIK",
    "c": 10.05
  },
  {
    "T": "EXTR",
    "c": 4.41
  },
  {
    "T": "KIMpL",
    "c": 25.9102
  }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2018-12-23
    • 2016-07-30
    • 1970-01-01
    • 2022-01-06
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多