数组去重问题

面试,常常赶上这个问题,因此,写篇文章总结下吧: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>
相关文章
相关标签/搜索