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();
  • 相关阅读:
    t
    0409笔记
    vue typescript ui库
    0329
    express+sequelize 做后台
    android申请多个权限的正确姿势
    [BBS] Reply.jsp 03
    [BBS] ShowArticleDetail.jsp 02
    [BBS] ShowArticleTree.jsp 01 帖子的树形展现-递归 、Session 存 login 否
    [Jweb] MyEclipse 的常见操作
  • 原文地址:https://www.cnblogs.com/double405/p/5174763.html
Copyright © 2011-2022 走看看