写一个数组去重的方法(支持多维数组)
在前端开发中,处理多维数组的去重问题可以稍微复杂一些,因为你需要递归地检查数组的每一层。以下是一个使用JavaScript编写的函数,该函数可以处理多维数组的去重问题:
function uniqueMultiDimArray(arr) {
const uniqueArr = [];
const seen = new Set();
function traverseAndCheck(item) {
// 如果项是数组,则递归处理
if (Array.isArray(item)) {
const uniqueSubArr = [];
for (const subItem of item) {
traverseAndCheck(subItem);
if (!seen.has(JSON.stringify(uniqueSubArr))) {
uniqueSubArr.push(subItem);
}
}
if (uniqueSubArr.length) {
seen.add(JSON.stringify(uniqueSubArr));
uniqueArr.push(uniqueSubArr);
}
} else {
// 如果项不是数组,则检查是否已经见过
const itemStr = JSON.stringify(item);
if (!seen.has(itemStr)) {
seen.add(itemStr);
uniqueArr.push(item);
}
}
}
// 遍历原始数组并检查每个项
for (const item of arr) {
traverseAndCheck(item);
}
return uniqueArr;
}
// 示例用法:
const multiDimArray = [1, 2, [3, 4], [3, 4], 5, [6, [7, 8]], [6, [7, 8]], 9];
const uniqueArray = uniqueMultiDimArray(multiDimArray);
console.log(uniqueArray);
// 输出: [1, 2, [3, 4], 5, [6, [7, 8]], 9]
注意:这个方法使用了JSON.stringify来将数组和对象转换为字符串,以便在Set中进行比较。这种方法在处理包含简单数据类型(如数字、字符串和布尔值)的多维数组时效果很好,但如果数组中包含函数、循环引用或特殊对象(如Date对象或具有特定方法的对象),则可能无法正确工作。对于这些更复杂的情况,你可能需要编写更复杂的自定义比较逻辑。
另外,由于JSON.stringify的性能开销,如果处理非常大的数组,这个方法可能会比较慢。在这种情况下,你可能需要考虑其他优化策略。
浙公网安备 33010602011771号