# 数组去重
# 方法一 双循环
// 每次循环拿出当前项与后边项去比较,当数据很大的时候性能不好
var arr = [1,3,2,5,3,2,4,1];
for (var i = 0; i < arr.length; i++) {
var cur = arr[i];
for (var j = i+1; j < arr.length; j++) {
if (cur == arr[j]) {
arr.splice(j,1); // 注意这里删除了一位之后数组长度会减少
j--;
}
}
}
console.log(arr);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 方法二 利用对象
一个对象的属性名不可以重复
把数组中的每一项,当作一个新对象的属性名和属性值存起来,在存储的时候判断当前的属性名是否已经存在,存在了就代表数组该项重复了,我们直接删除该项,不存在的话直接存储就行了
var arr = [1,3,2,5,3,2,4,1];
var obj = {};
for (var i = 0; i < arr.length; i++) {
var cur = arr[i];
if (obj[cur]==cur) {
arr.splice(i,1);
i--;
continue;
}
obj[cur] = cur;
}
obj = null;
console.log(arr);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 方法三 Set 对象
function dedupe (array) {
return Array.from(new Set(array))
}
1
2
3
2
3
# 方法四 创建新数组
function dedupe (array){
if (!array.length) {
return []
}
var newArray = [array[0]]; // 结果数组
for(var i = 1; i < array.length; i++){
if(newArray.indexOf(array[i]) === -1){
newArray.push(array[i]);
}
}
return newArray;
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12