js數組和字符串去重復幾種方法


js數組去重復幾種方法
第一種:也是最笨的吧。

Array.prototype.unique1 = function () {
var r = new Array();
label:for(var i = 0, n = this.length; i < n; i++) {
for(var x = 0, y = r.length; x < y; x++) {
if(r[x] == this[i]) {
continue label;
}
}
r[r.length] = this[i];
}
return r;
}
第二種:這個正則天書一樣。

Array.prototype.unique2 = function () {
return this.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
}
第三種:使用對象的【hasOwnProperty】方法

Array.prototype.unique3 = function() {
var temp = {}, len = this.length;
for(var i=0; i < len; i++) {
var tmp = this[i];
if(!temp.hasOwnProperty(tmp)) {
temp[this[i]] = "my god";
}
}

len = 0;
var tempArr=[];
for(var i in temp) {
tempArr[len++] = i;
}
return tempArr;
}
第四種:先排序,前項比后項。這個方法挺簡單的,但也實用

Array.prototype.unique4 = function () {
var temp = new Array();
this.sort();
for(i = 0; i < this.length; i++) {
if( this[i] == this[i+1]) {
continue;
}
temp[temp.length]=this[i];
}
return temp;

}


下面是以前經常用的,效率也很好。有點想hash表的感覺。

Array.prototype.unique5 = function() {
var res = [], hash = {};
for(var i=0, elem; (elem = this[i]) != null; i++) {
if (!hash[elem])
{
res.push(elem);
hash[elem] = true;
}
}
return res;
}
還能有種更簡單明了的寫法:
/*應用了集合的思想,有序不重復*/
function removeDuplicates(arr) {

    var temp = {}, r = [];

    for (var i in arr)

        temp[arr[i]] = true;

    for (var k in temp)

        r.push(k);

    return r;

}
看起來挺好容易的吧
經過自己驗證過了,代碼如下:
 1 function removeDuplicates(arr) {
 2 
 3     var temp = {}, r = [];
 4 
 5     for (var i in arr)
 6 
 7         temp[arr[i]] = true;
 8 
 9     for (var k in temp)
10 
11         r.push(k);
12 
13     return r;
14 
15 }
16 
17 //用法
18 
19 var fruits = ['apple', 'orange', 'peach', 'apple', 'strawberry', 'orange', 'strawberry', 'orange'];
20 
21 var uniquefruits = removeDuplicates(fruits);
22 alert(uniquefruits);

字符串去重方法:

采用正則

/**
* 字符串去重
* \r\n字符串分隔符
* $1分割后的字符串,$2字符串的索引
* 以分隔符將字符串分割,根據分割后的數組元素的個數進行循環比較
*/
    function strUnique(){
        var str = "abc, abcd, abc, abcde, abcd, abcde";
        var ret = [];
        str.replace(/[^,]+/g, function($1, $2){
            (str.indexOf($1) == $2) && ret.push($1);
        });
        alert(ret);
        return ret;
    }

 1     function strUnique(){
 2         var str = "abc, abcd, abc, abcde, abcd, abcde";
 3         var ret = [];
 4         str.replace(/[^,]+/g, function($1, $2){
 5             (str.indexOf($1) == $2) && ret.push($1);
 6         });
 7         alert(ret);
 8         return ret;
 9     }
10     
11 strUnique();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM