Javascript的数组去重

数组去重

数组去重的方法是面试中的常见问题,下面总结了一些自己用过的以及其他前辈分享的去重方法,如有侵扰烦请联系删除。

ES6提供的set方法

1
2
3
4
5
6
7
// Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例。
function unique(arr){
// new Set去重,Array.from创建一个新数组
return Array.from(new Set(arr))
}
let arr = [1,2,2,3,4,5,5]
console.log(unique(arr)) // [1,2,3,4,5]

indexOf去重

1
2
3
4
5
6
7
8
9
10
function unique(arr){
let newArr = []; // 新建一个数组来存放值
for(let i=0,len=arr.length;i<len;i++){
// 如果当前数据不在newArr中就加入newArr,否则不加入。避免重复
if(newArr.indexOf(arr[i]) === -1){
newArr.push(arr[i])
}
}
return newArr
}

双重for循环去重

1
2
3
4
5
6
7
8
9
10
11
12
function unique(arr){
for (let i=0,len=arr.length;i<len;i++){
for (let j=i+1,len=arr.length;j<len;j++){
if (arr[i] == arr[j]){
arr.splice(j,1) // 如果重复就删除一个
j--;// 删除一个值,则j与len都要减1
len--;
}
}
}
return arr;
}

利用sort排序对相邻元素去重

1
2
3
4
5
6
7
8
9
function unique(arr){
arr = arr.sort(); // 排序
let arr1 = [arr[0]]
for (let i=1,len=arr.length;i<len;i++){ // 从1开始
if(arr[i] != arr[i-1]){ //跟前一个对比,如果不重复就加入arr1
arr1.push(arr[i])
}
}
}

利用filter方法去重

1
2
3
4
5
6
7
function unique(arr){
// filter()方法创建一个新数组,数组元素是所有符合条件的元素
let newArr = arr.filter(function(item,index){
// 如果数组中item从0开始查找的索引值 === index,那就是前面没有相同元素,即不重复
return arr.indexOf(item,0) === index
})
}
作者

胡兆磊

发布于

2021-10-22

更新于

2022-10-23

许可协议