记得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;
}