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

如何获取数组中相同id对应最后一个元素 现有代码输出不符合预期

问题分析与修复方案

错误原因

  • Array.prototype.reverse()是原地修改方法,会直接变更原数组的元素顺序,不会生成新的数组副本。你调用reverse()后,后续findIndex用到的array变量已经是倒序后的数组,和你预期的查找基准不符。
  • 原有代码的findIndex直接引用外部的array变量,没有绑定当前正在过滤的数组实例,逻辑耦合导致结果出错,最终得到了每个id对应第一项的错误结果。

修复方法

方案1:调整原有实现逻辑

反转前先对原数组做浅拷贝避免修改原数据,过滤时直接使用当前遍历的数组实例做查找,最后把结果反转回原id升序顺序即可:

const result = array
  ?.slice() // 浅拷贝原数组,不修改原数据
  .reverse()
  .filter((ele, ind, currentArr) => ind === currentArr.findIndex((elem) => elem?.id === ele?.id))
  .reverse() // 还原为id升序的结果顺序

方案2:更高性能的O(n)复杂度实现

用Map遍历一次数组即可,相同id的项会自动覆盖为最后出现的值,不会修改原数组,大数据量下性能优势明显:

const result = Array.from(
  array?.reduce((map, item) => {
    map.set(item.id, item)
    return map
  }, new Map()).values()
)

两种方案执行后都可以得到你期望的输出:[{id:1,name:"C++"},{id:2,name:"Php"}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:18:02