zoukankan      html  css  js  c++  java
  • javascript数组去重算法

    先写出这个问题的所有方法,然后讨论性能问题:

    方法1:

    js数组去重就是把数组中重复的元素去掉:

    Array.prototype.delRepeat=function(){
                    var newArray=new Array();
                    var len=this.length;
                    for (var i=0;i<len ;i++){
                        alert("i:"+i);
                        for(var j=i+1;j<len;j++){
                            if(this[i]===this[j]){
                                j=++i;
                            }
                            alert("j:"+j);
                        }
                        newArray.push(this[i]);
                    }
                    return newArray;
                }
                arr =[1,1,2,1,3,4,4];
                alert(arr.delRepeat());//2,1,3,4
    

     我们分析一下上面代码的执行过程

    i=0 j=1,2,2,3,4,5,6
    i=3 j=4,5,6
    i=4 j=5,6
    i=5 j=6
    结果:2,1,3,4

    方法2:

            $(function(){
                Array.prototype.unique = function()
                {
                    this.sort();
                    //alert(this);
                    var re=[this[0]];
                    //alert(re);
                    for(var i = 1; i < this.length; i++)
                    {
                        //arr =[1,1,1,2,2,1,3,4,4];
                        if( this[i] !== re[re.length-1])
                        {
                            re.push(this[i]);
                            alert(re);
                        }
                    }
                    return re;
                }
                arr =[8,1,1,1,2,2,1,3,4,4];
                alert(arr.unique());
            });
    

       这个方法的思路是先把数组排序,然后比较相邻的两个值。 排序的时候用的JS原生的sort方法,JS引擎内部应该是用的快速排序吧。 最终测试的结果是此方法运行时间平均是第二种方法的三倍左右,不过比第一种和第三种方法快了不少。

    方法3:

            Array.prototype.unique = function(){
                //定义一个零时数组
                var n = [];
                for(var i = 0;i<this.length;i++){
                    //如果当前数组的第i已经保存进了临时数组,那么跳过,
                    //否则把当前项push到临时数组里面
                    if(n.indexOf(this[i]) == -1){
                        n.push(this[i]);
                    }
                }
                return n;
            }
    
  • 相关阅读:
    C# IEnumerable 和 IEnumerator接口浅析
    SQLite笔记
    命令行工具osql.exe使用
    2016年年终工作总结
    c# Json 自定义类作为字典键时,序列化和反序列化的处理方法
    多线程随笔
    常见异步机制分析
    SQL 通过syscolumns.xtype动态查找指定数据类型字段所包含的数据
    SQL 删除索引错误
    SQL 实用函数
  • 原文地址:https://www.cnblogs.com/baiduomai/p/2920761.html
Copyright © 2011-2022 走看看