如何找出对象数组中ID不在指定数组内的元素?
如何筛选对象数组中ID不在指定数组中的元素?
给定目标ID数组:
[60, 1456]
以及对象数组:
[ {id: 60, itemName: 'Main Location - Cleveland'}, {id: 1453, itemName: 'Second Location - Cleveland'}, {id: 1456, itemName: 'Third Location - New York'} ]
解决方案
可以通过Set优化查找效率结合数组filter方法快速筛选出不匹配的元素,步骤如下:
- 将目标ID数组转换为
Set结构——Set的has()方法查找时间复杂度为O(1),比数组includes()的O(n)更高效,尤其适合数据量较大的场景。 - 使用
filter遍历对象数组,保留那些id不在Set中的元素。
代码实现
const targetIds = [60, 1456]; const locationItems = [ {id: 60, itemName: 'Main Location - Cleveland'}, {id: 1453, itemName: 'Second Location - Cleveland'}, {id: 1456, itemName: 'Third Location - New York'} ]; // 转换为Set提升查找性能 const idSet = new Set(targetIds); // 筛选出ID不匹配的元素 const mismatchedItems = locationItems.filter(item => !idSet.has(item.id)); console.log(mismatchedItems); // 输出结果:[{id: 1453, itemName: 'Second Location - Cleveland'}]
简化版(数据量小时可用)
如果处理的数据量很小,也可以直接用数组的includes()方法省略Set转换:
const mismatchedItems = locationItems.filter(item => !targetIds.includes(item.id));
内容的提问来源于stack exchange,提问作者noclist
相关产品推荐
相关产品推荐

