JavaScript数组去重

面试中对数组的考察,工作中对于数组的利用已经是家常便饭,而数组去重也是一个老生常谈的话题,接下来谈下我对于数组去重常用的三种思路。

第一种:

  1. 定义一个新的数组,准备存放已知数组的元素
  2. 判断元素是否存在于新的数组中,不存在则将元素添加到新的数组中
1
2
3
4
5
6
7
8
9
10
11
function unique(arr){
var newArr=[],len=arr.length;
for (var i=0;i<len;i++) {
if(newArr.indexOf(arr[i])==-1){
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(unique([1,2,2,2,2,'3',3,3,3,4,5,6,7]))
//[1, 2, "3", 3, 4, 5, 6, 7]

第二种:

  1. 对已知数组进行排序,相同的元素会紧邻在一起
  2. 判断数组中前一个元素与后一个元素是否相同,并且判断前一个元素是否存在于新构建的数组中
  3. 前一步若是返回真,则将元素添加到新的数组
1
2
3
4
5
6
7
8
9
10
11
12
13
function deleteOdd2(arr){
arr.concat().sort();
var len=arr.length;
var newArr=[];
for (var i=0;i<len;i++) {
if(arr[i]!==arr[i+1]&&newArr.indexOf(arr[i])==-1){
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(deleteOdd2([1,22,3,3,'3',3,3,4,4,5,65,6,6]))
//[1, 22, 3, "3", 4, 5, 65, 6]

第三种:利用ES6的map和set进行去重

1
2
3
4
5
6
function unique (arr) {
const seen = new Map();
return arr.filter((a) => !seen.has(a) && seen.set(a, 1));
}
console.log(unique([1,2,2,3,4,45,5,5,5]));
//[1, 2, 3, 4, 45, 5]