js数组去重

总结了一下数组去重的方法:

利用 indexOf 进行数组去重

1
2
3
4
5
6
7
8
9
10
var arr = [1,2,2,3,4,5,6,7,8,9,0,2,3,5,8,9,0,1];
var arr1 = [];
for( var i = 0; i < arr.length; i++){
//ES5中引入了 indexOf 方法
if( arr1.indexOf( arr[i] ) == -1 ){
arr1.push( arr[i] );
}
}
console.log( arr1 );

假设法去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var arr = [1,2,2,3,4,5,6,7,8,9,0,2,3,5,8,9,0,1];
var arr1 = [];
for( var i = 0; i < arr.length; i++){
var flag = true;
for( var j = 0; j < arr1.length; j ++){
if( arr1[ j ] == arr[ i ]){
flag = false;
break;
}
}
if( flag ){
arr1.push( arr[ i ]);
}
}
console.log( arr1 );

利用缓存对象实现数组去重

1
2
3
4
5
6
7
8
9
10
11
12
13
var arr = [1,2,2,3,4,5,6,7,8,9,0,2,3,5,8,9,0,1];
var cache = {},
arr1 = [];
for( var i = 0; i < arr.length; i ++ ){
if( !cache[ arr[ i ]]) {
cache[ arr[ i ]] = true;
arr1.push( arr[ i ] );
}
}
console.log( arr1 );
ES6数组去重

ES6里新添加了两个很好用的东西,set和Array.from。
set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目。

'set'

在这我们可以看见,重复的项目已经被去掉了,包括NaN。正常情况下,NaN === NaN 返回的是false,但是在set里,一样能够帮你去重,厉害了。

'结果'

set返回的是一个对象,但是我们想要的是数组啊。
这回,就该轮到Array.from出场了,它的作用,就是可以把类数组对象、可迭代对象转化为数组。

'Array.from'

兼容性

目前主流的浏览器,Chrome,Firfox,Opera,Safari,包括微软的Edge,都是支持的,唯独IE系列不支持