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

ReactJS中移除数组重复对象:基于jobid与id精准去重

解决React中基于jobid+id组合过滤数组重复项的问题

我懂你现在的困扰——你在处理appliedCandidate数组去重时,之前用reduce只判断了id是否重复,结果把不同职位(jobid不同)下的同一候选人(id相同)记录误删了。其实我们需要把**jobid和id的组合作为唯一标识**,这样既能去掉真正的重复申请(同一职位同一候选人),又能保留不同职位下的有效申请记录。

正确的reduce实现方案

这里直接给你可以用的代码,逻辑是用jobid和id拼接成唯一键,以此判断是否重复:

// 处理去重逻辑
const uniqueAppliedCandidates = appliedCandidate.reduce((accumulator, current) => {
  // 生成唯一标识:jobid + id 的组合
  const uniqueKey = `${current.jobid}-${current.id}`;
  
  // 如果当前组合键还没在累加器里,就添加当前对象
  if (!accumulator[uniqueKey]) {
    accumulator[uniqueKey] = current;
  }
  
  return accumulator;
}, {});

// 将对象的值转换回数组,得到去重后的结果
const filteredCandidates = Object.values(uniqueAppliedCandidates);

代码说明

  • 为什么用jobid+id作为判断依据?因为同一个候选人(相同id)申请不同职位(不同jobid)属于两条独立的有效记录,不能删除;只有当jobid和id都完全相同时,才是重复的申请,需要过滤掉。
  • 这个方法只需要遍历数组一次,性能比用Set配合find的方式更优。

另一种可选方案(用Set实现)

如果你更喜欢用Set,也可以这样写,逻辑是一样的:

const filteredCandidates = Array.from(
  new Set(appliedCandidate.map(item => `${item.jobid}-${item.id}`)),
  key => appliedCandidate.find(item => `${item.jobid}-${item.id}` === key)
);

测试一下你的appliedCandidate数组,去重后会得到7个唯一的对象,正好是你需要的结果——保留了不同职位下的候选人记录,去掉了重复的申请项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:51:27