如何高效从对象组合数组中为每个条目筛选保留唯一组合
实现方案
核心思路
同一组的6种排列组合,本质是key与value的映射关系变化,所有value的集合完全一致。我们可以为每个组合生成与排列无关的唯一组标识,通过标识去重即可实现每个条目仅保留1个组合。
实现步骤
- 遍历数组中的每个组合对象
- 提取对象的所有value,按字典序排序后拼接为唯一组标识(使用分隔符避免不同值拼接产生歧义)
- 用Set缓存已出现的组标识,仅保留首次出现的对应组合
代码实现(JavaScript)
function filterUniqueCombinations(arr) { const visitedGroups = new Set(); const filteredResult = []; for (const combination of arr) { // 生成组唯一标识,用|分隔避免值拼接歧义 const groupKey = Object.values(combination).sort().join('|'); // 若值包含特殊字符可换用JSON.stringify,完全避免歧义: // const groupKey = JSON.stringify(Object.values(combination).sort()); if (!visitedGroups.has(groupKey)) { visitedGroups.add(groupKey); filteredResult.push(combination); } } return filteredResult; }
性能说明
该方案时间复杂度为O(n),n为数组总长度(最多6000条),空间复杂度为O(m),m为条目总数(最多1000条),处理耗时在毫秒级,完全满足性能要求。即使后续数据量级扩大10倍,也能保持高效运行。
内容的提问来源于stack exchange,提问作者s.khan
相关产品推荐
相关产品推荐

