如何从两个对象数组中基于ID筛选出唯一对象?
解决方法
可以通过以下步骤实现需求:
- 提取
cuisines数组中所有对象的id,存入一个Set集合(集合的查找效率比数组更高) - 使用数组的
filter方法遍历selected数组,筛选出cuisine_id不在上述集合中的元素
具体代码如下:
const cuisines = [ { id: 1, name: 'a' }, { id: 2, name: 'b' } ]; const selected = [ { cuisine_id: 1, id: 11}, { cuisine_id: 2, id: 22}, { cuisine_id: 3, id: 33 }, ]; // 提取cuisines的id集合 const cuisineIds = new Set(cuisines.map(item => item.id)); // 筛选出目标唯一对象 const uniqueItems = selected.filter(item => !cuisineIds.has(item.cuisine_id)); console.log(uniqueItems); // 输出: [{ cuisine_id: 3, id: 33 }]
补充说明:
- 使用
Set而非数组存储id,是因为Set.has()的时间复杂度为O(1),比数组的includes()(O(n))效率更高,数据量较大时差异会更明显 filter方法会返回一个新数组,不会修改原有的selected数组
内容的提问来源于stack exchange,提问作者s d
相关产品推荐
相关产品推荐

