关闭

js数组去重复项

311人阅读 评论(0) 收藏 举报
分类:

转载自:http://www.cnblogs.com/novus/archive/2011/06/30/1921132.html


今天看了   oneroom的 【javascript数字数组去重复项】觉得挺有意思的。顺便把我以前在看的对比一下。也算是做个备份。

第一种:也是最笨的吧。

 

1
2
3
4
5
6
7
8
9
10
11
12
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;
}

第二种:这个正则天书一样。

 

 

1
2
3
Array.prototype.unique2 = function () {
    return this.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
}

第三种:使用对象的【hasOwnProperty】方法

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}

第四种:先排序,前项比后项。这个方法挺简单的,但也实用。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
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表的感觉。

 

1
2
3
4
5
6
7
8
9
10
11
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;
}

 

还要谢谢oneroom 他给demo里面的时间计算函数很好用。以前我都不知道测试这些效率呢。

稍后附上他的demo和Watch文件。

文件

作者:Novus
出处:http://www.cnblogs.com/novus/
本文版权归作者和博客园共有,欢迎任何形式的转载,但请务必注明出处。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:218200次
    • 积分:3455
    • 等级:
    • 排名:第9588名
    • 原创:103篇
    • 转载:187篇
    • 译文:0篇
    • 评论:18条
    文章分类
    最新评论