如何筛选数组A中不在数组B的元素?代码问题排查
问题分析与解决方案
你的核心错误是错误地按数组索引位置对比元素,这完全不符合需求逻辑:
你当前的filter回调里用o?.patient?.uuid !== queueData?.data?.results[i]?.queueEntry.patient?.uuid,是拿visitsData第i项的患者uuid和queueData第i项的患者uuid对比,但两个数组的元素顺序、长度都没有对应关系,这种对比毫无意义,自然会返回全部visitsData内容。
正确实现步骤
- 先从
queueData中提取所有存在的患者uuid,存入一个Set(查找效率远高于数组) - 过滤
visitsData,保留患者uuid不在这个Set里的项
修正后的代码
// 提取queue中所有患者的uuid到Set const queuePatientUuids = new Set( queueData?.data?.results?.map(entry => entry?.queueEntry?.patient?.uuid) || [] ); // 过滤visitsData,保留不在队列中的患者 const data = visitsData?.data?.results?.filter( visit => !queuePatientUuids.has(visit?.patient?.uuid) );
额外说明
- 使用
Set而不是数组存uuid,是因为Set.has()的时间复杂度是O(1),比数组的includes()(O(n))效率高很多,数据量大时优势明显 - 加入
|| []是为了处理queueData?.data?.results为undefined的情况,避免map报错
内容的提问来源于stack exchange,提问作者CKW
相关产品推荐
相关产品推荐

