js如何对二维数组去重

原创
ithorizon 8个月前 (09-01) 阅读数 81 #Javascript

JS怎样对二维数组去重

在JavaScript中,对二维数组进行去重是一个相对繁复的问题,归因于需要考虑数组中每个子数组的唯一性。二维数组去重意味着我们需要确保每个子数组在数组中只出现一次,不考虑其内部元素的顺序。下面将介绍几种实现二维数组去重的方法。

方法一:利用JSON.stringify和Set数据结构

这种方法通过将每个子数组成为字符串,利用Set结构来自动去重,然后再将字符串转换回数组。

function unique2DArray(arr) {

const uniqueSet = new Set(arr.map(JSON.stringify));

return Array.from(uniqueSet, JSON.parse);

}

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

const uniqueArr = unique2DArray(arr);

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

注意:这个方法仅适用于子数组内的元素可以序列化为JSON的情况,且不考虑数组内元素排序变化的情况。

方法二:利用递归和Set数据结构

如果数组中的元素本身也是数组,或者包含不可序列化的对象,我们可以使用递归和Set结合的方法来处理去重问题。

function unique2DArrayDeep(arr) {

const uniqueArray = [];

const seen = new Set();

for (const subArr of arr) {

const sortedSubArr = subArr.sort();

const stringifiedSubArr = JSON.stringify(sortedSubArr);

if (!seen.has(stringifiedSubArr)) {

seen.add(stringifiedSubArr);

uniqueArray.push(sortedSubArr);

}

}

return uniqueArray;

}

const arr = [[1, 2], [2, 1], [2, 3], [1, 2], [3, 4]];

const uniqueArr = unique2DArrayDeep(arr);

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

注意:这个方法考虑了子数组内部的元素顺序,如果内部元素顺序不同也被认为是不同的数组。

方法三:使用自定义比较函数

如果需要更为繁复的比较逻辑,你可以定义一个比较函数来判断两个子数组是否相同。

function arraysEqual(a, b) {

if (a === b) return true;

if (a == null || b == null) return false;

if (a.length != b.length) return false;

for (let i = 0; i < a.length; ++i) {

if (a[i] !== b[i]) return false;

}

return true;

}

function unique2DArrayCustom(arr) {

const uniqueArray = [];

const seen = new Set();

for (const subArr of arr) {

const subArrString = JSON.stringify(subArr);

if (!seen.has(subArrString)) {

seen.add(subArrString);

uniqueArray.push(subArr);

}

}

return uniqueArray;

}

const arr = [[1, 2], [2, 1], [2, 3], [1, 2], [3, 4]];

const uniqueArr = unique2DArrayCustom(arr);

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

这种方法提供了完全的自定义比较逻辑,可以适用于各种繁复的去重场景。

总结

对二维数组进行去重是一个繁复的操作,归因于需要考虑子数组的唯一性以及子数组内部元素的比较。上述方法提供了不同的视角和实现做法,你可以依实际需求选择合适的方法。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Javascript


热门