如何解决如何在 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 举报,一经查实,本站将立刻删除。