如何对比两个对象数组,返回未被标记删除的成员ID数组
筛选未标记删除的成员ID数组
核心思路
先把标记待删除的用户ID提取成一个查询效率更高的集合,再从原始成员数组里过滤出不在这个集合里的用户,最后提取他们的ID即可。
实现代码
// 提取待删除用户的ID,存入Set提升查找效率 const deletedIds = new Set(checkedIds.map(user => user.ID)); // 过滤出未标记删除的用户,再提取他们的ID const remainingIds = teamMembers .filter(user => !deletedIds.has(user.ID)) .map(user => user.ID);
示例验证
对应你给出的场景:
- teamMembers = [{ID:45, Name:'xxx', Email:'xxx'}, {ID:78, Name:'yyy', Email:'yyy'}, {ID:2, Name:'zzz', Email:'zzz'}]
- checkedIds = [{ID:45, Name:'xxx', Email:'xxx'}]
运行代码后,deletedIds为Set {45},最终remainingIds会得到[78, 2],完全匹配需求。
补充说明
用Set而非数组includes的原因是,当数据量较大时,Set.has()的时间复杂度为O(1),比数组includes()的O(n)效率高很多,能避免性能瓶颈。
内容的提问来源于stack exchange,提问作者some_new_dev_dude
相关产品推荐
相关产品推荐

