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

如何在Mule 4中选取对象数组内重复id对应的最后一个实例

实现方案

核心思路

遍历数组时用键值对结构(Map/对象)以id为Key存储对应对象,后续遇到相同id时直接覆盖已存储的对象,遍历完成后所有Key对应的Value就是该id最后一次出现的对象,最终提取Value集合作为结果即可,时间复杂度为O(n)。

常用语言实现示例

JavaScript 实现

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

// 用Map结构存储,严格保留元素最后出现的先后顺序
const idMap = new Map()
input.message.forEach(item => idMap.set(item.id, item))

// 生成最终结果
const output = {
  message: Array.from(idMap.values())
}

如果不需要严格保留遍历顺序,也可以用普通对象代替Map:

const idMap = {}
input.message.forEach(item => {
  idMap[item.id] = item
})
const output = {
  message: Object.values(idMap)
}

Kotlin 实现

你用到的distinctBy默认保留第一个出现的元素,要保留最后一次出现的元素有两种简洁实现:

  1. 反转数组后去重,再反转回原顺序
val result = input.message
    .reversed()
    .distinctBy { it.id }
    .reversed()
  1. 利用associateBy的覆盖特性实现,性能更高
val result = input.message
    .associateBy { it.id }
    .values
    .toList()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:15:04