数组去重是JS初学者前期会遇到的一个问题,数组去重有许多种方法,这里总结出了最常用的几种。
一、使用ES6新增数据结构 Set
ES6 提供了新的数据结构 Set
。Set
对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。我们可以利用这一唯一特性进行数组的去重工作。
//方式一
let arr = [1,1,2,2,'a','a'];
let set = new Set(arr);
console.log(set) //{1, 2, "a"};
//方式二
let set = new Set([1,1,2,2,'a','a']);
console.log(set); //{1, 2, "a"}
//方式三 多个数组合并去重
let arr1 = [1, 2, 3, 4];
let arr2 = [2, 3, 4, 5, 6];
let set = new Set([...arr1, ...arr2]);
console.log(set);//{1, 2, 3, 4, 5, …}
Set
语法
new Set([iterable]);
参数iterable
如果传递一个可迭代对象,它的所有元素将不重复地被添加到新的 Set中。如果不指定此参数或其值为null,则新的 Set为空。
需要注意的是Set返回的是一个新的Set对象。
二、for循环嵌套,splice删除重复内容
第一层for
循环遍历数组,第二层for
循环取到第一层循环取得内容之后的内容,然后使用if
逐个比较。遇到重复内容时利用splice()
方法可以删除指定位置内容的特性将其删除。删除后因为后面的数组会填补这个空缺,所以我们在删除时在让第二层循环自减一次,这样可以在删除后不跳过后补上去的内容。
let arr = [1,1,2,2,'a','a'];
for(let i = 0;i < arr.length;i++){
for(let j = i + 1;j < arr.length;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
}
}
}
console.log(arr);// [1, 2, "a"]
三、利用indexOf去重
新建一个空的数组用于接收不重复的原数组内容,通过for
循环遍历原数组,使用indexOf
判断结果数组中是否存在当前元素,如果没有相同的内容则push
进结果数组,有相同的值则不执行任何操作继续判断下一个内容。
var arr = [1,1,2,2,'a','a'];
var arr1 = [];
for (var i=0;i<arr.length;i++){
if(arr1.indexOf(arr[i]) == -1){
arr1.push(arr[i])
};
};
console.log(arr1);//[1, 2, "a"]