数组去重可谓面试题经典呢,如果能用多种方式实现的话,那么至少会给面试官留下一定的好感,觉得你的思维很广阔。
在这里我向大家介绍3种方法实现
我们在这里顶一个数组
var arr = [3,5,5,5,1,2,3,4];
方法1:
遍历数组,定义一个新的数组(newarr),用indexOf()判断是否在新的数组(newarr)中出现原数组中的每一项,如果没有出现,就push进去。代码如下:
function noRepeat(arr1){
var newarr = [];
for(var i=0;i<arr1.length;i++){
//判断新的数组(newarr)中是否存在arr[i],如果没有存在,就push到新的数组中
if(newarr.indexOf(arr1[i]) === -1){
newarr.push(arr1[i]);
}
}
//注意这里需要return
return newarr;
}
var arr1 = [3,5,5,5,1,2,3,4];
var result1 = noRepeat(arr1);
console.log('去重后的数组',result1);
**indexOf()**
判断字符串中第一次出现的位置,返回的是位置,如果是-1的话,说明就是没有
方法2:
首先是进行排序,不需要改进版的,因为只要把相同的项排在一起就行了,然后用这一项和下一项进行比较。如果相等的话,就通过splice()方法删除。记得需要–i;不然会少比一项。
代码如下:
function noRepeat2(arr2){
arr2.sort();
for(var i=0;i<arr2.length;i++){
if(arr2[i] == arr2[i+1]){
arr2.splice(i,1);
i--;
}
}
return arr2;
}
var arr2 = [3,5,5,5,1,2,3,4];
var result2 = noRepeat2(arr2);
console.log('去重后的数组',result2);
方法3
1.通过创建一个空对象,然后遍历数组,如果对象中没有原数组中的每一项时就push到新的数组中。
function noRepeat3(arr3) {
var json = {};
var newarr = [];
for(var i=0;i<arr3.length;i++){
if(!json[arr3[i]]){
json[arr3[i]] = true;
newarr.push(arr3[i]);
}
}
return newarr;
}
var arr3 = [3,5,5,5,1,2,3,4];
var result3 = noRepeat3(arr3);
console.log('result3',result3);