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

如何移除二维数组中的重复子数组?

移除二维数组中的重复子数组

你遇到的问题核心在于:数组是引用类型,indexOf比较的是数组的引用地址而非内容,所以即使两个子数组元素完全一致,只要不是同一个引用,indexOf就无法识别为重复项,导致原方法失效。

下面提供两种实用的解决方案:

方案一:利用字符串序列化(高效通用)

将每个子数组序列化为字符串,借助Set记录已出现的字符串,实现快速去重。JSON.stringify能稳妥处理大多数原始类型的子数组元素:

const arr = [[-1, 0, 1], [-1, -1, 2], [-1, 0, 1]];
const seen = new Set();
const uniqueArr = arr.filter(subArr => {
  const str = JSON.stringify(subArr);
  if (!seen.has(str)) {
    seen.add(str);
    return true;
  }
  return false;
});
console.log(uniqueArr); // 输出 [[-1,0,1],[-1,-1,2]]

方案二:逐元素比较(无序列化,适合小数据量)

如果不想用序列化,可以自定义比较逻辑,逐个检查子数组的元素是否完全一致:

const arr = [[-1, 0, 1], [-1, -1, 2], [-1, 0, 1]];
const uniqueArr = arr.filter((subArr, index) => {
  // 遍历当前子数组之前的所有元素,判断是否重复
  return arr.slice(0, index).every(item => {
    if (item.length !== subArr.length) return true; // 长度不同直接排除重复
    // 长度相同则逐个元素对比
    return !item.every((val, i) => val === subArr[i]);
  });
});
console.log(uniqueArr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:20:25