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

如何在JavaScript/TypeScript中将对象数组指定重复元素移至首位?

如何在JavaScript/TypeScript中将数组中与指定对象重复的元素移至首位?

给定以下变量:

let Obj1 = 
    [
    {Id: 123, name: 'A'},
    {Id: 124, name: 'B'},
    {Id: 125, name: 'C'},
    {Id: 126, name: 'D'},
    {Id: 127, name: 'E'}
    ]

let Obj2 = {Id:126, name: 'D'}

其中Obj2是后端返回的数据,Obj1是前端已有的数组,需要动态将Obj1中与Obj2重复的元素移至索引0的位置,最终期望结果如下:

[
{Id: 126, name: 'D'},
{Id: 123, name: 'A'},
{Id: 124, name: 'B'},
{Id: 125, name: 'C'},
{Id: 127, name: 'E'}
]

方法1:修改原数组操作

通过findIndex定位匹配元素的位置,删除该元素后插入到数组首位:

// 用Id作为匹配依据(对象引用不同时,直接===无法判断内容相同)
const matchIndex = Obj1.findIndex(item => item.Id === Obj2.Id);
if (matchIndex !== -1) {
  // 从原数组移除匹配元素
  const matchedItem = Obj1.splice(matchIndex, 1)[0];
  // 插入到数组最前面
  Obj1.unshift(matchedItem);
}

说明:如果后端返回的Obj2是Obj1中元素的直接引用,也可以直接用item === Obj2作为判断条件。

方法2:生成新数组(不修改原数组)

如果需要保留原数组,可以通过过滤+拼接的方式生成目标数组:

const matchedItem = Obj1.find(item => item.Id === Obj2.Id);
const newArr = matchedItem 
  ? [matchedItem, ...Obj1.filter(item => item.Id !== Obj2.Id)] 
  : [...Obj1];

说明:先找到匹配元素,将其放在数组开头,后面拼接过滤掉该元素的原数组;如果没有找到匹配元素,则直接返回原数组的副本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:12:30