Fork me on GitHub

JavaScript 的几种数组去重方法

JS 的数组去重,作为经常遇到的场景,有很多种实现方式。

本篇博客主要总结了常见常用的一些js数组去重方法。

最基本的数组去重
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function distinct(arr){
var b = []; //初始值也可为 arr[0]

for(var i = 0; i < arr.length;i++){
var flag = false;
for(var j =0;j < b.length; j++){
if(arr[i] == b[j]){
flag = true;
//可在此处直接break跳出本层循环
}
};
if(!flag){
b.push(arr[i]);
};
};
return b;
}
使用Object

通过Objectkey来进行筛选去重

1
2
3
4
5
6
7
8
9
10
11
function distinct(arr){
let hash = {};
let data = [];
for(let i = 0;i < arr.length;i++){
if (!hash[arr[i]]){
hash[arr[i]] = true;
b.push(arr[i])
}
}
return b;
}
使用indexOf() 方法

​ 思路类似第一种方法,但是使用 indexOf( ) 方法(需注意此方法不支持IE6-8)

1
2
3
4
5
6
7
8
9
function distinct(arr){
var b = [arr[0]]
for(var i = 0;i<arr.length;i++){
if(b.indexOf(arr[i]) === -1){b.push(arr[i]);}
//上一行也可以用如下写法
// (b.indexOf(arr[i]) === -1)&&(b.push(arr[i]))
}
return b;
}
使用 indexOf() 方法和 filter 方法
更进一步,不仅使用了 indexOf() 方法,还使用了 filter
1
2
3
4
5
6
7
function distinct(arr){
var b = a.filter(function(item,index,array){
return array.indexOf(item) === index;
//元素首次出现的位置是否为元素当前位置
});
return b
}
排序后去重
1
2
3
4
5
6
7
8
9
10
11
function distinct(arr){
arr.sort()
var b = [arr[0]]
for(var i=0;i< arr.length;i++){
if(arr[i] != b[b.length-1]){
//排序后查看数组的元素是否与结果数组中最后一个元素相同即可判断是否重复
b.push(arr[i])
}
}
return b;
}
排序后去重的简略写法
1
2
3
4
5
function distinct(arr){
return arr.sort().filter(function(item,index,array){
return !index || item != array[index-1]
})
}
ES6 的数组去重
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//使用Set对象
function distinct(arr){
let set = new Set(arr);
return Array.from(set);
}
//使用Set对象的另一种方法
function distinctarr){
return [...new Set(arr)];
}
//使用Map对象
function distinctarr{
let res = new Map();
return arr.filter((item) => !res.has(a) && res.set(a,1))
}
----本文结束感谢阅读----