数组去重问题
面试,经常遇上这个问题,所以,写篇文章总结下吧:
<!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>
浙公网安备 33010602011771号