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();
  • 相关阅读:
    java接口鉴权之sign签名校验与JWT验证
    完整的后端开发流程-深入浅出Java线程池:使用篇
    Java多线程加法计算--Java识别静态验证码和动态验证码
    超全面设计指南:如何做大屏数据可视化设计?
    vue+echarts+datav大屏数据展示及实现中国地图省市县下钻
    开源」目前见过的最好的开源OA产品架构师之路(一):何时选用合适的语言
    如何做大屏数据可视化设计?
    Spring项目方便调试打印请求信息点击跳转到方法
    Echart生成的报表导出为PDF
    java环境变量一键配置
  • 原文地址:https://www.cnblogs.com/double405/p/5174763.html
Copyright © 2011-2022 走看看