好,下面是关于“js数组去重的常用方法总结”的完整攻略。
ES6新增了Set容器,可以创建一个不重复的集合。因此,利用Set可以快速去重,代码如下:
const arr = [1, 2, 3, 3, 4, 5, 4];
const result = Array.from(new Set(arr)); // [1, 2, 3, 4, 5]
首先将数组转换成Set对象,然后再将Set对象转换成数组即可。这种方法简单易懂,但只适用于基本数据类型。如果需要去重的是复杂数据类型,需要注意Set中对象的比较方式是浅比较,因此可能会出现误判。
双重循环的方式比较直观,代码如下:
const arr = [1, 2, 3, 3, 4, 5, 4];
const result = [];
for (let i = 0; i < arr.length; i++) {
let isRepeat = false;
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
isRepeat = true;
break;
}
}
if (!isRepeat) {
result.push(arr[i]);
}
}
套两层循环,每次比较相邻的两个元素,如果有重复的再通过标记位去除即可。这种方法虽然不需要额外的空间,但时间复杂度较高,不适用于大规模数据的去重。
indexOf方法可以查找数组中指定元素的位置,如果没有找到返回-1。基于这个原理,可以通过一次循环来实现去重,代码如下:
const arr = [1, 2, 3, 3, 4, 5, 4];
const result = [];
for (let i = 0; i < arr.length; i++) {
if (result.indexOf(arr[i]) === -1) {
result.push(arr[i]);
}
}
单层循环,每次将数组中的元素与result中的元素比较,如果result中没有则加入。这种方法相对于双重循环要快一些,但也不太适用于大规模数据的去重。
Map对象是一种简单的键/值映射。利用这种映射关系,就可以实现数组去重。代码如下:
const arr = [1, 2, 3, 3, 4, 5, 4];
const map = new Map();
const result = [];
for (let i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], true);
result.push(arr[i]);
}
}
利用Map的方法,每次将数组中的元素存入Map中,重复元素会被覆盖。利用has方法可以判断Map中是否存在该元素,如果不存在则将其保存至result中,这样就可以完成去重了。这种方法相对来说不太快,但适用性较广,可以实现复杂数据类型的去重。
Reduce方法是JS数组原型中的一个函数,它可以快捷地对数组中的每个元素进行操作。代码如下:
const arr = [1, 2, 3, 3, 4, 5, 4];
const result = arr.reduce((acc, cur) => {
if (!acc.includes(cur)) {
acc.push(cur);
}
return acc;
}, []);
使用reduce可以快速地对数组中元素去重。acc为存储去重后的数组,每次遍历时判断是否重复,如果不重复则加入acc中。这种方法也比较适用于复杂数据类型的去重。
本文总结了js数组去重的五种常用方法,包括利用Set、双重循环、indexOf、Map以及reduce,各有特点,适用于不同数据类型和规模的去重需求。
本文链接:http://task.lmcjl.com/news/11205.html