如何从对象数组中筛选出与指定id数组不匹配的对象
筛选对象数组中id不在指定集合内的元素
给定两个数组:
const arr1 = [1,2,3,4]; const arr2 = [ {id:1,name:"john"}, {id:2,name:"james"}, {id:3,name:"sam"}, {id:4,name:"dani"}, {id:5,name:"junaif"}, {id:6,name:"david"} ];
需要筛选出arr2中id不在arr1集合内的对象,最终目标数组为:
const arr3 = [{id:5,name:"junaif"},{id:6,name:"david"}];
基础解法:filter + includes
直接用数组的filter方法遍历arr2,结合includes判断当前对象的id是否不在arr1中:
const arr3 = arr2.filter(item => !arr1.includes(item.id));
高性能优化解法(数据量大时推荐)
如果arr1元素较多,includes的查找效率会偏低(时间复杂度O(n)),可以先把arr1转为Set,利用Set.has()的O(1)查找性能提升整体效率:
const idSet = new Set(arr1); const arr3 = arr2.filter(item => !idSet.has(item.id));
两种写法都能得到预期结果,可根据数据规模选择合适的方案。
内容的提问来源于stack exchange,提问作者junaif
相关产品推荐
相关产品推荐

