String 对于Mule 3.8.4 | Dataweave 1.0中的循环

String 对于Mule 3.8.4 | Dataweave 1.0中的循环,string,for-loop,mule-studio,dataweave,mulesoft,String,For Loop,Mule Studio,Dataweave,Mulesoft,我需要将传入的有效负载字符串与缓存中现有的产品名称列表进行字符串比较,因为没有精确的匹配,首先我需要从传入的有效负载字符串中删除最后3个字符,并与所有现有的字符串/产品名称进行比较。 如果找到匹配项,则执行其他转换。 否则,从传入的有效负载字符串中再删除一个字符并再次比较。 我需要重复这个过程,直到传入负载的字符串大小=3。如果字符串大小小于3,则无需进行比较 小结:我需要从右向左删除字符并进行字符串比较 输入有效载荷如下所示: { "productPartNo": "MPN-400110"

我需要将传入的有效负载字符串与缓存中现有的产品名称列表进行字符串比较,因为没有精确的匹配,首先我需要从传入的有效负载字符串中删除最后3个字符,并与所有现有的字符串/产品名称进行比较。 如果找到匹配项,则执行其他转换。 否则,从传入的有效负载字符串中再删除一个字符并再次比较。 我需要重复这个过程,直到传入负载的字符串大小=3。如果字符串大小小于3,则无需进行比较

小结:我需要从右向左删除字符并进行字符串比较

输入有效载荷如下所示:

{
  "productPartNo": "MPN-400110",
  "supplier": "70058",
  "productCode": "02",
}
需要将字符串productPartNo与下面现有产品列表中的partNumber字段进行比较

{
  "Product": [
    {
      "productNumber": "420475",
      "created": "2012-10-28",
      "partNumber": "C1F2PNEX71K9",
      "codeNo": "7712",
      "manufacturer": ""
    },
    {
      "productNumber": "478376",
      "created": "2017-12-12",
      "partNumber": "N77-C77-RMK=",
      "codeNo": "1589",
      "manufacturer": "50884"
    },
    {
      "productNumber": "478381",
      "created": "2017-12-12",
      "partNumber": "CON-U-C1F2PXNE",
      "codeNo": "1586",
      "manufacturer": "50884"
    },
    {
      "productNumber": "478384",
      "created": "2017-12-12",
      "partNumber": "PMPN4070",
      "codeNo": "1585",
      "manufacturer": "50884"
    }
 ]
}
在本例中,应将我的输入字符串productPartNo:MPN-400110与所有PartNumber进行比较。 从last中删除字符后,字符串“MPN”将与partNumber:PMPN4070匹配/包含,因此我应该获得与partNumber-PMPN4070关联的代码1585作为我的输出字段


如何在%dw 1.0中实现这一逻辑这需要一点思考,而且已经很晚了,剩下的脑力也不多了,早上我可能会修改,但考虑到您的示例数据,这是一个良好的开端。如果您有任何进一步的澄清,请告诉我

只需在转换消息处理器中复制和粘贴,然后打开预览

%dw 1.0
%output application/dw

%var products = {
  "Product": [
    {
      "productNumber": "420475",
      "created": "2012-10-28",
      "partNumber": "C1F2PNEX71K9",
      "codeNo": "7712",
      "manufacturer": ""
    },
    {
      "productNumber": "478376",
      "created": "2017-12-12",
      "partNumber": "N77-C77-RMK=",
      "codeNo": "1589",
      "manufacturer": "50884"
    },
    {
      "productNumber": "478381",
      "created": "2017-12-12",
      "partNumber": "CON-U-C1F2PXNE",
      "codeNo": "1586",
      "manufacturer": "50884"
    },
    {
      "productNumber": "478384",
      "created": "2017-12-12",
      "partNumber": "PMPN4070",
      "codeNo": "1585",
      "manufacturer": "50884"
    }
 ]
}


%var inputPayload = {
  "productPartNo": "MPN-400110",
  "supplier": "70058",
  "productCode": "02"
}
---
// Get a list with all the substrings to search with--this give you the following array
// ["MPN-400","MPN-40","MPN-4","MPN-","MPN"]
(4 to (sizeOf inputPayload.productPartNo ) - 2 map inputPayload.productPartNo[0 to -$]
map (
    // Filter the list of products on the substring, 
    // this should either give you a matches or the empty list
    // Finally, take the first match.  I am not sure if this what you want.
    (products.Product filter (e) -> (e.partNumber contains $))[0]
) 
filter ($ != null))[0].codeNo

请提供样本输入数据和预期输出。然后我可以给你一个解决方案。尽管如此,您可以使用[0到-3]去除字符串的最后三个字符;这是范围选择器,这是它的文档。可以使用map操作符进行迭代;以下是相关文档:感谢George的回复。我已经用示例输入和输出数据更新了帖子。谢谢Hanks George,创建一个包含所有需要比较的字符串的数组是个好主意。如果您能提供如下创建数组的逻辑,这将非常有用。[MPN-400,MPN-40,MPN-4,MPN-,MPN]简单使用此部分:4到输入有效负载的大小。productPartNo-2映射输入有效负载。productPartNo[0到-$]