面试题解析:找出数组中重复项

记得2010年去阿里巴巴中文站面试前端,标哥(中文站的前端leader)面试我,其中有一道题就是如题,要求找出数组中的重复项。虽然当时面试的时候解答的不够满意,但是回头再看看这道题,还是比较有深意的。解答的思路很多,根据思路也大致能了解到面试者在JS方面的精通程度。

后来也经常见人问起这个题如何解,我对这个题的印象很深刻,以至于我后来当leader以后也常考察面试者对此题的解答思路,思路好的面试者真是寥寥无几。

下面就各种思路简单介绍下,希望给各位有所启发,祝大家面试都得高分,hoho~~

var ar = ['a','b','c','d','a',2,'c','xoxo','ppp'];  //原始数组
var new_ar = ar;
var len = ar.length;  //存储数组长度
var ar2=[];  //
var k = 0;  //判断器变量
for(var i=0;i<len;i++){
    for(var e=0;e<len;e++){
        if(ar[i] == ar[e]){
            k+=1;
            if(k!==1){
                ar2.push(ar[i]);
            }
        }
    }
    k=0;
}
ar2 = ar2.splice(0,ar2.length/2);

alert('重复的项是'+ar2);//前半段或后半段是重复项

var ar = ['a','b','c','d','a',2,'c','xoxo','ppp'];  //原始数组
ar=ar.sort();
var ar2=[];
var len=ar.length;
for(var i=0;i<len;i++){
    if(ar[i]==ar[i+1]){
        ar2.push(ar[i]);
    }
}
alert('重复项是:'+ ar2)

var arr =[1,2,2,3,3,444,5,77,444,66,6,6,6];
Array.prototype.unique=function(){
  var hash={};
  var arr1=[];
  for (i=0;i<this.length;i++){
    if (!hash[this[i]]){  //判断如果哈希表里没有当前项
    hash[this[i]]=true;
    arr1.push(this[i]);     //把当前数组的当前项push到临时数组
    }
  } 
return arr1;
}