zoukankan      html  css  js  c++  java
  • 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);

    字符串去重方法:

    采用正则

    /**
    * 字符串去重
    * 字符串分隔符
    * $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();
  • 相关阅读:
    每日一水 POJ8道水题
    编译和使用 MySQL C++ Connector
    j2ee model1模型完成分页逻辑的实现 详解!
    DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
    指向结构体变量的指针
    EOSS V3.0 企业运营支撑系统(基于RBAC原理的权限管理)
    MybatisGen1.0 Mybatis JavaBean Mapper生成工具
    The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
    资源-Android:Android
    软件-开发软件:Android Studio
  • 原文地址:https://www.cnblogs.com/double405/p/5174763.html
Copyright © 2011-2022 走看看