js map数组去重
时间: 2023-11-16 10:57:54 AIGC 浏览: 150
JS中的Map对象可以用于数组去重,它是ES6中新出的语法,本质上也是键值对,只是其键不局限于普通对象的字符串。使用Map对象去重的方法是遍历数组,如果Map对象中不存在当前元素,则将其添加到Map对象中,并将其添加到新数组中。如果Map对象中已经存在当前元素,则不将其添加到新数组中。除了Map对象,还可以使用双层for循环和Array.filter和map对象数组去重等方法进行数组去重。
相关问题
js json数组去重
可以使用ES6的Set数据结构来去重,具体代码如下:
let arr = [1, 2, 3, 3, 4, 4, 5];
let uniqueArr = Array.from(new Set(arr));
console.log(uniqueArr); // [1, 2, 3, 4, 5]
如果需要去重的是包含JSON对象的数组,则可以先将数组中的JSON对象序列化成字符串,再进行去重操作,最后再将字符串还原为JSON对象,具体代码如下:
let arr = [{name: 'Tom', age: 18}, {name: 'Jack', age: 20}, {name: 'Tom', age: 18}];
let uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(uniqueArr); // [{name: "Tom", age: 18}, {name: "Jack", age: 20}]
js多维数组去重
### JavaScript 多维数组去重的方法
在 JavaScript 中对多维数组进行去重是一个常见的需求。以下是一些实现多维数组去重的解决方案。
#### 方法一:递归与 `Set` 结合
可以使用递归的方式遍历多维数组,并结合 `Set` 来确保每个元素只出现一次。此方法适用于嵌套层级不确定的情况。
```javascript
function deepUniq(arr) {
const seen = new Set();
function helper(item) {
if (Array.isArray(item)) {
return item.map(helper).filter((el) => {
const key = JSON.stringify(el);
if (seen.has(key)) return false;
seen.add(key);
return true;
});
}
return item;
}
return helper(arr);
}
const arr = [[1, 2], [3, 4], [1, 2], [5, 6]];
console.log(deepUniq(arr)); // 输出: [[1, 2], [3, 4], [5, 6]]
```
这种方法利用了 `Set` 的唯一性特性,同时通过递归处理多维数组[^1]。
#### 方法二:基于 `reduce` 和 `JSON.stringify`
对于二维数组(或固定嵌套深度的多维数组),可以使用 `reduce` 方法来构建一个新数组,并通过 `JSON.stringify` 将子数组转换为字符串形式以检测重复项。
```javascript
function uniq2DArray(arr) {
return arr.reduce((acc, curr) => {
const str = JSON.stringify(curr);
if (!acc.some(el => JSON.stringify(el) === str)) {
acc.push(curr);
}
return acc;
}, []);
}
const arr2D = [[1, 2], [3, 4], [1, 2], [5, 6]];
console.log(uniq2DArray(arr2D)); // 输出: [[1, 2], [3, 4], [5, 6]]
```
该方法的时间复杂度较高,但由于使用了 `JSON.stringify`,它能够有效处理嵌套数组的比较问题[^2]。
#### 方法三:双重循环过滤
如果需要保留原始顺序并且不依赖现代方法(如 `Set` 或 `reduce`),可以使用双重循环逐一比较并过滤重复项。
```javascript
function uniqueByLoop(arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
let isDuplicate = false;
for (let j = 0; j < result.length; j++) {
if (JSON.stringify(arr[i]) === JSON.stringify(result[j])) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) result.push(arr[i]);
}
return result;
}
const arrNested = [[1, 2], [3, 4], [1, 2], [5, 6]];
console.log(uniqueByLoop(arrNested)); // 输出: [[1, 2], [3, 4], [5, 6]]
```
这种方法虽然简单,但时间复杂度较高,适合小规模数据集[^3]。
### 注意事项
- 对于深层嵌套的数组,推荐使用递归方法。
- 使用 `JSON.stringify` 时需注意其可能无法正确区分某些复杂对象(如包含函数或 `undefined` 的对象)。
- 如果性能是关键因素,应避免频繁调用 `JSON.stringify`,可考虑其他优化策略。
阅读全文
相关推荐















