Js中去除数组中重复元素的4种方法

原创 2016年08月11日 16:51:36

    今天工作遇到此问题,尝试多个方法不尽人意,故此写个博客来总结一下如何在js中去除重复元素。


    方法1:        

        Array.prototype.method1 = function(){
            var arr[];    //定义一个临时数组
            for(var i = 0; i < this.length; i++){    //循环遍历当前数组
                //判断当前数组下标为i的元素是否已经保存到临时数组
                //如果已保存,则跳过,否则将此元素保存到临时数组中
                if(arr1.indexOf(this[i]) == -1){
                    arr.push(this[i]);
                }
            }
            return arr;
        }

    方法2:

        
        Array.prototype.method2 = function(){
            var h{};    //定义一个hash表
            var arr[];  //定义一个临时数组
            
            for(var i = 0; i < this.length; i++){    //循环遍历当前数组
                //对元素进行判断,看是否已经存在表中,如果存在则跳过,否则存入临时数组
                if(!h[this[i]]){
                    //存入hash表
                    h[this[i]] = true;
                    //把当前数组元素存入到临时数组中
                    arr.push(this[i]);
                }
            }
            return arr;
        }

    方法3:

        Array.prototype.method3 = function(){
            //直接定义结果数组
            var arr[this[0]];
            for(var i = 1; i < this.length; i++){    //从数组第二项开始循环遍历此数组
                //对元素进行判断:
                //如果数组当前元素在此数组中第一次出现的位置不是i
                //那么我们可以判断第i项元素是重复的,否则直接存入结果数组
                if(this.indexOf(this[i]) == i){
                    arr.push(this[i]);
                }
            }
            return arr;
        
        }

    方法4:

        Array.prototype.method4 = function(){
            //将数组进行排序
            this.sort();
            //定义结果数组
            var arr[this[0]];
            for(var i = 1; i < this.length; i++){    //从数组第二项开始循环遍历数组
                //判断相邻两个元素是否相等,如果相等说明数据重复,否则将元素写入结果数组
                if(this[i] !== arr[arr.length - 1]){
                    arr.push(this[i]);
                }            
            }
            return arr;
            
        }

    例如:

        var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
        alert(arr.method3());

    方法1和方法3都用到了数组的indexOf()方法,此方法主要用来查找元素在数组中第一次出现的位置。比较浪费资源和时间。

    方法2使用的是hash表,把已经出现过的元素通过下标形式写入到一个object内,下标的引用要比用数组indexOf()方法搜索节省时间。

    方法4是先将数组排序,然后一次比较相邻的两个元素的值,排序使用的是js原生的sort()方法。

    读者可以自行编写程序测试四种方法的效率如何。例如:首先利用随机函数生成一个50000长度的随机数数组,然后分别用四种方法进行执行,记录程序运行时间进行比较四种方法的优劣。

版权声明:转载时请标注http://blog.csdn.net/zhihua_w

原生JS数组去重的几种方法

有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛。(以下代码直接在原型上添加的的方法,为的就是和...
  • hhhh222222
  • hhhh222222
  • 2017年09月07日 20:17
  • 246

数组去去重的几种写法

数组去重是面试中经常问到的问题 var arr=[1,3,4,52,4,5,4,8,7,6]; 第一种方法:使用ES5中的indexOf进行去重: function arr1(){ ...
  • yjkup
  • yjkup
  • 2016年11月20日 15:56
  • 5565

js数组去重的4个方法

面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项。据我所知,百度、腾讯、盛大等都在面试里出过这个题目。 这个问题看起来简单,但是其实暗藏杀机。 考的不仅仅是实现这个功能,更...
  • chengxuyuan20100425
  • chengxuyuan20100425
  • 2013年01月12日 23:13
  • 106112

JS数组去重的三种方法

今天做了一个JS的数组去重题目,在网上查阅一些数组函数、相关知识点以及博客,总结三种数组去重的方法: 方法一:用方法indexOf()判断该数第一次出现的位置是否就是该位置,如果是true,就将此数...
  • Sprite_Yzc
  • Sprite_Yzc
  • 2016年12月12日 21:26
  • 378

js数组去重的5种算法实现

1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持...
  • chinashanzhang
  • chinashanzhang
  • 2018年02月06日 18:43
  • 10

javascript中数组里对象的去重

数组中对象去重,慎用
  • m0_37285193
  • m0_37285193
  • 2017年01月11日 15:20
  • 3400

五种js实现数组去重的方法

第一种 删除后面重复元素 function removeRepeat1(arr){ var a1=((new Date).getTime()) for(var ...
  • bingkingboy
  • bingkingboy
  • 2016年03月26日 16:34
  • 10842

js实现数组去重的三个方法、数组的快速排序

数组去重方法/校验数组是否有重复项
  • u013558749
  • u013558749
  • 2016年03月29日 11:43
  • 4721

js数组去重的几种方法

JavaScript中去除数组的重复元素是前端必须知道的知识点之一。 网络上已经有很多写js数组去重的博客,各有各的说法,这里整理几种去重的方法,供大家参考。 去重方法一,利用数组排序,通过相...
  • earscher
  • earscher
  • 2016年10月13日 09:31
  • 1480

js中实现数组去重的5种方法

这是在逛网页的时候看到的方法,觉得以后会有用到的时候,就先收藏下来,这里是自己手敲的为了加深印象 遍历数组法最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点...
  • u012884402
  • u012884402
  • 2015年08月28日 18:08
  • 1352
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Js中去除数组中重复元素的4种方法
举报原因:
原因补充:

(最多只允许输入30个字)