JS 清除字符串数组中,重复元素

  1         <script language="JavaScript">  
  2     <!--  
  3     var arrData=new Array();  
  4     for(var i=0; i<10000; i++)  
  5     {  
  6     arrData[arrData.length] = String.fromCharCode(Math.floor(Math.random()*26)+97);  
  7     }  
  8     //document.write(arrData+"<br/>");   
  9       
 10     //方法一,普通遍历  
 11     function myArray_Unique(myArray)  
 12     {  
 13     //var myArray=new Array("a","a","c","a","c","d","e","f","f","g","h","g","h","k");  
 14     var haha=myArray;  
 15     for(var i=0;i<myArray.length;i++)  
 16     {  
 17     for(var j=0;j<myArray.length;j++)  
 18     {  
 19     temp=myArray[i];  
 20     if((i+j+1)<myArray.length&&temp==myArray[i+j+1]) //如果当前元素与后一个元素相等  
 21     haha.splice(i+j+1,1); //然后就移除下一个元素   
 22     }  
 23     }  
 24     return haha;  
 25     }   
 26       
 27     //方法二  
 28     function getUnique(someArray)  
 29     {  
 30     tempArray=someArray.slice(0);//复制数组到临时数组  
 31     for(var i=0;i<tempArray.length;i++)  
 32     {  
 33     for(var j=i+1;j<tempArray.length;)  
 34     {  
 35     if(tempArray[j]==tempArray[i])  
 36     //后面的元素若和待比较的相同,则删除并计数;  
 37     //删除后,后面的元素会自动提前,所以指针j不移动  
 38     {  
 39     tempArray.splice(j,1);  
 40     }  
 41     else  
 42     {  
 43     j++;  
 44     }  
 45     //不同,则指针移动  
 46     }  
 47     }  
 48     return tempArray;  
 49     }   
 50       
 51     //方法三 正则表达式 -- 适用于字符型数组  
 52     function getUnique2(A)  
 53     {  
 54     var str = "x0f"+ A.join("x0f");  
 55     while(/(w+)[^1]*1/.test(str))  
 56     str = str.replace("x0f"+ RegExp.$1, "");  
 57     return str.substr(1).split("x0f");  
 58     }   
 59       
 60     //方法四 关联结构  
 61     Array.prototype.unique = array_unique;  
 62     function array_unique()  
 63     {  
 64     var o = new Object();  
 65     for (var i=0,j=0; i<this.length; i++)  
 66     {  
 67     if (typeof o[this[i]] == 'undefined')  
 68     {  
 69     o[this[i]] = j++;  
 70     }  
 71     }  
 72     this.length = 0;  
 73     for (var key in o)  
 74     {  
 75     this[o[key]] = key;  
 76     }  
 77     return this;  
 78     } 
 79 
 80     function unique(arr) {
 81     var result = [], hash = {};
 82     for (var i = 0, elem; (elem = arr[i]) != null; i++) {
 83         if (!hash[elem]) {
 84             result.push(elem);
 85             hash[elem] = true;
 86         }
 87     }
 88     return result;
 89    }  
 90       
 91     var d = new Date().getTime();  
 92     document.write(myArray_Unique(arrData));  
 93     d = new Date().getTime()-d;  
 94     document.write("<br/>2000元素 方法一算法计耗时 "+ d +" 毫秒!<br/><br/>"); //大约370ms~390ms左右   
 95       
 96     var d = new Date().getTime();  
 97     document.write(getUnique(arrData));  
 98     d = new Date().getTime()-d;  
 99     document.write("<br/>2000元素 方法二算法计耗时 "+ d +" 毫秒!<br/><br/>"); //大约360ms~380ms左右   
100       
101     var d = new Date().getTime();  
102     document.write(getUnique2(arrData));  
103     d = new Date().getTime()-d;  
104     document.write("<br/>2000元素 正则表达式 方法三算法计耗时 "+ d +" 毫秒!<br/><br/>");//大约80ms左右   
105       
106     var d = new Date().getTime();  
107     document.write(arrData.unique());  
108     d = new Date().getTime()-d;  
109     document.write("<br/>2000元素 关联结构 方法四算法计耗时 "+ d +" 毫秒!<br /><br />");//大约0ms~10ms左右   
110 
111     var d = new Date().getTime();  
112     document.write(unique(arrData));  
113     d = new Date().getTime()-d;  
114     document.write("<br/>2000元素 hashtable 方法五算法计耗时 "+ d +" 毫秒!<br /><br />");//大约0ms~10ms左右   
115       
116     //-->  
117     </script>   
118 
119  
        <script language="JavaScript">  
    <!--  
    var arrData=new Array();  
    for(var i=0; i<10000; i++)  
    {  
    arrData[arrData.length] = String.fromCharCode(Math.floor(Math.random()*26)+97);  
    }  
    //document.write(arrData+"<br/>");   
      
    //方法一,普通遍历  
    function myArray_Unique(myArray)  
    {  
    //var myArray=new Array("a","a","c","a","c","d","e","f","f","g","h","g","h","k");  
    var haha=myArray;  
    for(var i=0;i<myArray.length;i++)  
    {  
    for(var j=0;j<myArray.length;j++)  
    {  
    temp=myArray[i];  
    if((i+j+1)<myArray.length&&temp==myArray[i+j+1]) //如果当前元素与后一个元素相等  
    haha.splice(i+j+1,1); //然后就移除下一个元素   
    }  
    }  
    return haha;  
    }   
      
    //方法二  
    function getUnique(someArray)  
    {  
    tempArray=someArray.slice(0);//复制数组到临时数组  
    for(var i=0;i<tempArray.length;i++)  
    {  
    for(var j=i+1;j<tempArray.length;)  
    {  
    if(tempArray[j]==tempArray[i])  
    //后面的元素若和待比较的相同,则删除并计数;  
    //删除后,后面的元素会自动提前,所以指针j不移动  
    {  
    tempArray.splice(j,1);  
    }  
    else  
    {  
    j++;  
    }  
    //不同,则指针移动  
    }  
    }  
    return tempArray;  
    }   
      
    //方法三 正则表达式 -- 适用于字符型数组  
    function getUnique2(A)  
    {  
    var str = "x0f"+ A.join("x0f");  
    while(/(w+)[^1]*1/.test(str))  
    str = str.replace("x0f"+ RegExp.$1, "");  
    return str.substr(1).split("x0f");  
    }   
      
    //方法四 关联结构  
    Array.prototype.unique = array_unique;  
    function array_unique()  
    {  
    var o = new Object();  
    for (var i=0,j=0; i<this.length; i++)  
    {  
    if (typeof o[this[i]] == 'undefined')  
    {  
    o[this[i]] = j++;  
    }  
    }  
    this.length = 0;  
    for (var key in o)  
    {  
    this[o[key]] = key;  
    }  
    return this;  
    }

    function unique(arr) {
    var result = [], hash = {};
    for (var i = 0, elem; (elem = arr[i]) != null; i++) {
        if (!hash[elem]) {
            result.push(elem);
            hash[elem] = true;
        }
    }
    return result;
   }  
      
    var d = new Date().getTime();  
    document.write(myArray_Unique(arrData));  
    d = new Date().getTime()-d;  
    document.write("<br/>2000元素 方法一算法计耗时 "+ d +" 毫秒!<br/><br/>"); //大约370ms~390ms左右   
      
    var d = new Date().getTime();  
    document.write(getUnique(arrData));  
    d = new Date().getTime()-d;  
    document.write("<br/>2000元素 方法二算法计耗时 "+ d +" 毫秒!<br/><br/>"); //大约360ms~380ms左右   
      
    var d = new Date().getTime();  
    document.write(getUnique2(arrData));  
    d = new Date().getTime()-d;  
    document.write("<br/>2000元素 正则表达式 方法三算法计耗时 "+ d +" 毫秒!<br/><br/>");//大约80ms左右   
      
    var d = new Date().getTime();  
    document.write(arrData.unique());  
    d = new Date().getTime()-d;  
    document.write("<br/>2000元素 关联结构 方法四算法计耗时 "+ d +" 毫秒!<br /><br />");//大约0ms~10ms左右   

    var d = new Date().getTime();  
    document.write(unique(arrData));  
    d = new Date().getTime()-d;  
    document.write("<br/>2000元素 hashtable 方法五算法计耗时 "+ d +" 毫秒!<br /><br />");//大约0ms~10ms左右   
      
    //-->  
    </script>  
原文地址:https://www.cnblogs.com/interdrp/p/5879071.html