如何在对象数组的子数组中基于多type值匹配目标对象?
根据class子数组的全部type值筛选对象数组
实现代码
const dataClass = [ { "id": 101, "class": [ { "type": "A", "value": "A-class" }, { "type": "B", "value": "B-class" }, { "type": "C", "value": "C-class" } ], "rank": 1 }, { "id": 102, "class": [ { "type": "D", "value": "D-class" }, { "type": "E", "value": "E-class" }, { "type": "F", "value": "F-class" } ], "rank": 2 }, { "id": 103, "class": [ { "type": "G", "value": "G-class" }, { "type": "H", "value": "H-class" }, { "type": "I", "value": "I-class" } ], "rank": 3 } ]; // 定义需要匹配的全部type集合 const targetTypes = new Set(['D', 'E', 'F']); // 执行筛选 const filteredData = dataClass.filter(item => { const itemTypeSet = new Set(item.class.map(cls => cls.type)); // 验证两个集合完全匹配:数量一致且所有目标type都存在于当前对象的type集合中 return itemTypeSet.size === targetTypes.size && [...targetTypes].every(t => itemTypeSet.has(t)); }); console.log(filteredData);
逻辑说明
- 用Set优化匹配效率:将目标type和当前对象的type都转为Set,既可以自动去重(避免重复type干扰判断),也能通过
has方法高效检查元素是否存在。 - 双重验证保证完全匹配:
- 先对比两个Set的长度,确保当前对象的class子数组type数量和目标数量一致,不会多也不会少。
- 再遍历目标type集合,确认每个元素都存在于当前对象的type集合中,确保所有指定type都被包含。
内容的提问来源于stack exchange,提问作者mb-1208
相关产品推荐
相关产品推荐

