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

如何在JavaScript二维数组中找出重复的子数组?

解决二维数组中获取重复子数组的问题

你之前的方法无效,是因为JavaScript中数组属于引用类型,indexOf方法使用严格相等(===)进行比较。两个内容完全相同的数组,它们的内存引用是不同的,所以array1.indexOf(element)只会找到当前元素自身的索引,永远等于index,导致过滤或检测逻辑失效。

方法一:将数组转为字符串进行比较

把每个子数组转为字符串(比如用JSON.stringify),通过字符串的相等性来判断重复,最后再转回原数组格式:

const array1 = [[1,2], [2,3], [1,2]];

// 转换子数组为字符串,用于快速比较
const strArray = array1.map(item => JSON.stringify(item));
// 筛选出重复的原数组元素
const duplicateItems = array1.filter((item, idx) => strArray.indexOf(JSON.stringify(item)) !== idx);
// 对重复结果去重,避免多次输出同一子数组
const uniqueDuplicates = [...new Set(duplicateItems.map(JSON.stringify))].map(JSON.parse);

console.log(uniqueDuplicates); // 输出: [[1,2]]

注意:如果子数组包含undefined、函数、Symbol等无法被JSON.stringify正确序列化的类型,这种方法会失效。

方法二:直接比较子数组的内容

编写一个辅助函数,逐个比较两个数组的元素是否完全相同,再通过遍历检测重复:

const array1 = [[1,2], [2,3], [1,2]];

// 辅助函数:判断两个数组内容是否完全一致
function isArrayEqual(arrA, arrB) {
  if (arrA.length !== arrB.length) return false;
  for (let i = 0; i < arrA.length; i++) {
    if (arrA[i] !== arrB[i]) return false;
  }
  return true;
}

const duplicates = [];
const seen = [];

array1.forEach(item => {
  // 检查当前元素是否已经出现过
  const exists = seen.some(seenItem => isArrayEqual(seenItem, item));
  if (exists) {
    // 避免重复添加同一子数组
    if (!duplicates.some(dup => isArrayEqual(dup, item))) {
      duplicates.push(item);
    }
  } else {
    seen.push(item);
  }
});

console.log(duplicates); // 输出: [[1,2]]

这种方法兼容性更好,适合子数组包含各种基本类型的场景,但大数据量下性能会比字符串比较差。

方法三:使用Map记录已出现的数组

用字符串作为键,通过Map记录已经遍历过的子数组,快速判断重复:

const array1 = [[1,2], [2,3], [1,2]];
const seenMap = new Map();
const duplicates = [];

array1.forEach(item => {
  const key = JSON.stringify(item);
  if (seenMap.has(key)) {
    // 确保同一子数组只添加一次
    if (!duplicates.some(dup => JSON.stringify(dup) === key)) {
      duplicates.push(item);
    }
  } else {
    seenMap.set(key, true);
  }
});

console.log(duplicates); // 输出: [[1,2]]

这种方法兼顾了性能和易用性,是比较通用的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:30:54