如何移除二维数组中的重复子数组?
移除二维数组中的重复子数组
你遇到的问题核心在于:数组是引用类型,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
相关产品推荐
相关产品推荐

