面试,常常赶上这个问题,因此,写篇文章总结下吧:javascript
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>数组去重方法总结</title> </head> <body> <script type="text/javascript"> var array1=[1,1,1,2,3,4,4,4,11,12,11,13,12,6,6,6,11,12,13]; var array2=[]; // 效率较低;新建一个数组,存贮未重复元素,添加控制器,若是元素不重复,则添加进新数组 Array.prototype.unique1=function(){ var res=[this[0]]; console.log(res) for(var i=0;i<this.length;i++){ var repeat=false; for(var j=0;j<res.length;j++){ if(this[i]==res[j]){ repeat=true; break; } }if(!repeat){ res.push(this[i]); } } return res; }; //console.log(array1.unique1()); //改变了数组顺序 Array.prototype.unique2=function(){ this.sort();//想一想【1,1,11,12,11,】 var res=[this[0]]; for(i=0;i<this.length;i++){ if(this[i]!==res[res.length-1]){ res.push(this[i]); } } return res; }; //console.log(array1.unique2()); //第三种主要是利用控制器,对每一个数组的数值转换为脚,实际上,json返回的就是不重复元素的第一个序号 Array.prototype.unique3=function(){ var res=[]; var json={}; for(i=0;i<this.length;i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]]=1; } } console.log(json); return res; }; //console.log(array1.unique3()); Array.prototype.indexOf=function(e){ for(i=0;i<this.length;i++){ j=this[i]; if (j==e) { return i; break; } } return -1; }; //console.log(array1.indexOf(4)) Array.prototype.unique4=function(){ var res=[]; for(i=0;i<this.length;i++){ if (res.indexOf(this[i])==-1) { res.push(this[i]); } } return res; }; console.log(array1.unique4());//这种方法有待改正,浏览器会卡死。这只是一种理论上的方法 </script> </body> </html>