You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在包含子列表的数组中提取唯一组合

嵌套数组移除重复子列表

针对你给出的嵌套数组去重需求,这里提供两种实用的实现方案:

方案一:利用JSON序列化快速去重(适合简单子数组)

由于数组是引用类型,直接用Set无法识别内容相同的子数组,我们可以先将子数组序列化为字符串,利用字符串的唯一性去重,再转回数组。

如果你的需求是只保留重复出现过的子列表的唯一实例(即排除只出现一次的[2,5]),代码如下:

const originalArr = [ [ 1, 2 ], [ 3, 5 ], [ 2, 5 ], [ 3, 5 ], [ 1, 2 ] ];

// 第一步:统计每个子列表的出现次数
const countMap = {};
originalArr.forEach(item => {
  const key = JSON.stringify(item);
  countMap[key] = (countMap[key] || 0) + 1;
});

// 第二步:筛选出出现多次的子列表并去重
const result = Array.from(
  new Set(originalArr.filter(item => countMap[JSON.stringify(item)] > 1).map(JSON.stringify))
).map(str => JSON.parse(str));

console.log(result); // 输出: [ [ 1, 2 ], [ 3, 5 ] ]

如果只是需要移除重复项,保留所有子列表的唯一实例(即结果包含[2,5]),可以简化为:

const uniqueArr = Array.from(
  new Set(originalArr.map(item => JSON.stringify(item)))
).map(str => JSON.parse(str));

console.log(uniqueArr); // 输出: [ [ 1, 2 ], [ 3, 5 ], [ 2, 5 ] ]

方案二:自定义数组比较函数(无序列化依赖)

如果不想用JSON序列化,可以自己实现子数组的相等判断逻辑,适合子数组元素为基本类型的场景:

const originalArr = [ [ 1, 2 ], [ 3, 5 ], [ 2, 5 ], [ 3, 5 ], [ 1, 2 ] ];

// 判断两个子数组是否完全相等
function isEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) return false;
  for (let i = 0; i < arr1.length; i++) {
    if (arr1[i] !== arr2[i]) return false;
  }
  return true;
}

// 统计每个子列表的出现次数
const countMap = new Map();
originalArr.forEach(item => {
  let matched = false;
  for (const [key] of countMap) {
    if (isEqual(key, item)) {
      countMap.set(key, countMap.get(key) + 1);
      matched = true;
      break;
    }
  }
  if (!matched) countMap.set(item, 1);
});

// 筛选出重复出现的子列表
const result = [];
countMap.forEach((count, key) => {
  if (count > 1) result.push(key);
});

console.log(result); // 输出: [ [ 1, 2 ], [ 3, 5 ] ]

内容的提问来源于stack exchange,提问作者Marcel Dz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:31:00