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
相关产品推荐
相关产品推荐

