微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Mule 4 的对象数组中选择最后一个重复对象

如何解决如何在 Mule 4 的对象数组中选择最后一个重复对象

有一组重复对象(相同 id),需要从中选择最后一个重复对象。 输入:

{ 
    "message": [
        { 
            "name": "Abc","address":"Mumbai","phone":"91-1234567891","id":123
        },{ 
            "name": "Pqr","address":"Pune","phone":"91-1234985438","id":456
        },{ 
            "name": "Abc","address":"Delhi","id":123
        }
    ]
}

预期输出

{
  "message": [
    {
      "name": "Pqr","address": "Pune","phone": "91-1234985438","id": 456
    },{
      "name": "Abc","address": "Delhi","phone": "91-1234567891","id": 123
    }
  ]
}

输出中,它应该采用最后重复的对象值。我在 id 字段上尝试了 distinctBy 函数,但它从重复项中选择随机对象。 任何帮助,将不胜感激。谢谢。

解决方法

distinctBy 不是随机的——它将保留第一个实例并消除所有符合您的唯一性标准的后续条目。

如果您先反转数组,然后在 distinctBy 上执行 id,您将删除除最后一个元素之外的所有元素。

试试这个:

%dw 2.0
output application/json

var data = { 
    "message": [
        { 
            "name": "Abc","address":"Mumbai","phone":"91-1234567891","id":123
        },{ 
            "name": "Pqr","address":"Pune","phone":"91-1234985438","id":456
        },{ 
            "name": "Abc","address":"Delhi","id":123
        }
    ]
}

---
message: data.message[-1 to 0] distinctBy $.id

如果原始顺序对您很重要,则再次反转数组。表达式将如下所示:

message: (data.message[-1 to 0] distinctBy $.id)[-1 to 0]
,

您可以尝试以下 DataWeave 表达式:

%dw 2.0
output application/json
---
{
    "message": payload.message groupBy ((item,index) -> item.id) 
        pluck ((value,key,index) -> value) 
            map ((item,index) -> item[sizeOf(item) - 1])
}

输入:

{ 
    "message": [
        { 
            "name": "Abc","id":123
        }
    ]
}

输出:

{
  "message": [
    {
      "name": "Abc","address": "Delhi","phone": "91-1234567891","id": 123
    },{
      "name": "Pqr","address": "Pune","phone": "91-1234985438","id": 456
    }
  ]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。