• 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;
            }
    
  • 相关阅读:
    Qt Creator 5.0 发布
    Qt编写可视化大屏电子看板系统19-横向柱状图
    Qt开发经验小技巧166-170
    Qt编写安防视频监控系统62-子模块6预置位
    Qt编写可视化大屏电子看板系统18-柱状分组图
    Qt编写安防视频监控系统61-子模块5设备控制
    如果对golang的gin框架中的handler做单元测试
    samba
    内存溢出
    动态规划面试题
  • 原文地址:https://www.cnblogs.com/baiduomai/p/2920761.html
Copyright © 2020-2023  润新知