js-数组去重(有五种方法)-包含数组扩展形式

来源:互联网 发布:网站美工需要会什么 编辑:程序博客网 时间:2024/05/16 15:29

对于arr,arr1可以使用简单的去重方法,但要注意时间复杂度的比较。
对于arr2,可以对里面的数组进行toString(),转化为字符串再比较,不能直接进行数组比较。
对于arr3,判断null时需要注意,null不等于null,所以需增加条件this[i]==this[i],当this[i]!=this[i]时,说明this[i]为null,需另外处理

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>js-数组去重</title>    <meta content="http://note.youdao.com/share/index.html?id=55da195bec366816c2093d2e630fb812&type=note#/">    <style></style>    <script>            var tem = new Array("2","3","5","3","4","5");        var arr = ['1a','ni','2','ni','1a','5']; //字符串数组        var arr1 = [1,5,2,3,1,5,9]; //数字数组        var arr2 = [1,5,[1,2],4,9,1,[1,2]]; //包含数组的数组        var arr3 = [1,4,undefined,7,8,null,null]; //包含null的数组        //1. 遍历,数组下标去重法        //时间复杂度:O(n^2),indexOf本身也消耗了O(n)的复杂度,空间复杂度:O(n)        //IE8以下不支持indexOf        Array.prototype.removeRepeat1 = function() {            var res =[this[0]];            for(var i=1; i<this.length;i++){ //从第二项开始遍历                if(this.indexOf(this[i])==i){                    res.push(this[i]);                }            }            return res;        };        //2. 遍历,比较备用数组去重法        Array.prototype.removeRepeat2 = function() {            var res =[];            for(var i=0; i<this.length;i++){                if(res.indexOf(this[i])==-1){                    res.push(this[i]);                }            }            return res;        };        //3. 遍历,hash去重法        //类似于,利用对象的属性不能相同的特点进行去重        //时间复杂度:O(n),空间复杂度:O(n)        Array.prototype.removeRepeat3 = function() {            var h= {};  //哈希表            var res = [];            for(var i=0; i<this.length;i++){                if(!h[this[i]]){    //如果hash表中没有当前项                    h[this[i]]=true; //存入hash表                    res.push(this[i]);                }            }            return res;        };        //4. 遍历,Set去重法(ES6的 Set)        //时间复杂度:O(n),空间复杂度:O(n) Set兼容性不好,IE11以下不支持        Array.prototype.removeRepeat4 = function(){               var result = new Set();               for(var i=0; i<this.length; i++){                  result.add(this[i]);               }               return result;        }        //Set的方法二:Array.from(array)把Set转化为数组        Array.prototype.removeRepeat41 = function(){                    return Array.from(new Set(this));;        }        //5. 排序后相邻去重法        Array.prototype.removeRepeat5 = function() {            this.sort();            var res=[this[0]];            for(var i = 1; i< this.length; i++){                if(this[i]!=this[i-1]){                    res.push(this[i]);                }            }            return res;        }        var result = arr2.removeRepeat1();        for(var i=0; i< result.length; i++){            console.log(result[i]);        }        /*console.log(result); //set数组直接输出就好,不用遍历*/        /*对于arr2,可以对里面的数组进行toString(),转化为字符串再比较,不能直接进行数组比较。*/        //双重循环做arr2        var arr2 = [1,[1],5,[1,2],4,9,1,[1,2],[1]]; //包含数组的数组        //先toString()在比较,注意不能使用全等,数组全等要求地址也相同的        Array.prototype.unique = function() {            var res=[];            for(var i=0;i<this.length;i++){                var flag = false;                for(var j=0;j<res.length;j++){                    if(this[i].toString()==res[j].toString()  &&  (typeof this[i])==(typeof res[j])){                        flag = true;                    }                }                if(!flag){                    res.push(this[i]);                }            }            return res;        };        /*对于arr3,判断null时需要注意,null不等于null,所以需增加条件this[i]==this[i],当this[i]!=this[i]时,说明this[i]为null,需另外处理*/        //全等        var arr3 = [1,4,undefined,7,8,null,null]; //包含null的数组        Array.prototype.unique = function() {            var res=[];            for(var i=0;i<this.length;i++){                var flag = false;                for(var j=0;j<res.length;j++){                    if(this[i]===res[j]){                        flag = true;                    }                }                if(!flag){                    res.push(this[i]);                }            }            return res;        };        var result = arr3.unique();        for(var i=0; i< result.length; i++){            console.log(result[i]);        }       </script></head><body></body></html> 
0 0
原创粉丝点击