前端面试中,数组去重也是经常会被问到的,以下是我自己总结的关于数组去重的方法。
第一种:利用数组的indexOf()方法来实现。该方法可用于数组的查找,接收两个参数,第一参数是要查找的项,第二个是查找的起点位置。该方法返回要查找的项在数组中的位置,从数组的开头去找,如果没有找到,会返回-1。
function unique1(arr) {
var arr1 = [];
for(var i = 0;i < arr.length;i++) {
if(arr1.indexOf(arr[i]) == -1) {
arr1.push(arr[i]);
}
}
return arr1;
}
var A = unique1([1,2,3,3,2,4,5]);
console.log(A);
第二种:对原数组进行排序(sort方法),排序后相同元素相邻。并且定义一个新数组存放原数组的第一个元素,然后遍历原数组,将原数组中的每一个数与新数组的最后一个数比较,如果不同,则将该值加入新数组。
function unique2(arr) {
arr.sort();
var arr1 = [arr[0]];
for(var i = 1;i < arr.length;i++) {
if(arr[i] != arr1[arr1.length-1]) {
arr1.push(arr[i]);
}
}
return arr1;
}
var B = unique2([2,4,2,3,1,1,2,4]);
console.log(B);
第三种:定义一个新数组存放原数组的第一个元素,然后将原数组元素和新数组元素一一进行对比,如果值不同,则将该值存放在新数组中。
function unique3(arr) {
var arr1 = [arr[0]];
for(var i = 1;i < arr.length;i++) {
var flag = false;
for(var j = 0;j < arr1.length;j++) {
if(arr[i] == arr[j]) {
flag = true;
break;
}
}
if(!flag) {
arr1.push(arr[i]);
}
}
return arr1;
}
var C = unique3([4,3,2,3,2,1,4,5]);
console.log(C);
第四种:es6提供的Set数据结构
var arr = [2,3,2,2,3,4,1,5,4];
var arr1 = new Set(arr);
console.log(arr1);
Set数据结构类似于数组,但是成员的值都是唯一的,没有重复的值。所以利用Set也可以去实现数组去重。