首页 > 语言 > JavaScript > 正文

javascript实现数组去重的多种方法

2024-05-06 15:00:13
字体:
来源:转载
供稿:网友

废话不多说,直接拿干货!

先说说这个实例的要求:写一个方法实现数组的去重。(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考);

先给初学者解释一下什么叫数组去重(老鸟跳过):意思就是讲数组里面重复的元素去掉,比如说var arr = [3,2,4,2,1,2]; 数组去重得到的新数组是 [3,2,4,1],就是这么一个功能。

实现方法比较简单,实现的方式也比较多,很多大牛也写过相关的文章,之所以写这边博客,旨在一是备忘,二是给初学者能更好的理解其实现的原理,好,我们看第一种实现方式:

第一种,通过遍历新数组来去重

var arr = [1,'b','b',4,3,3,4,5,1];         //第一种    Array.prototype.unique1 = function(){      var arr1 = []; //定义一个新数组      for(var i=0;i<this.length;i++){        if(arr1.indexOf(this[i]) == -1){//判断目标数组中在原数组里是否存在          arr1.push(this[i]);        }       }       return arr1;    }    console.log(arr); //[1,'b','b',4,3,3,4,5,1]    console.log(arr.unique1()); //[1, "b", 4, 3, 5]    //这种方法的主要思路就是,新建一个数组,然后在原数组中,从第一个开始,看看新数组里面有没有这个元素,如果有,就忽略,然后进行下一个,如果没有,则把这个元素存到新数组里面,    //也就是说,每一次比较,都会遍历新数组,直到找到相同元素为止,比较耗性能

如果大家不习惯这个写法,可以改成下面的写法,效果是一样的:

var arr = [1,'b','b',4,3,3,4,5,1];function unique1(arr){      var arr1 = [];      for(var i=0;i<arr.length;i++){        if(arr1.indexOf(arr[i]) == -1){//判断目标数组中在原数组里是否存在          arr1.push(arr[i]);         }       }       return arr1;    }    console.log(arr); //[1,'b','b',4,3,3,4,5,1]    console.log(unique1(arr)); //[1, "b", 4, 3, 5]

下面的方法我就不改写法了,你们可以按照上面的格式来改写一下,结果我也不输出了,因为结果是一样的,注释写在代码中,慢慢体会一下

第二种,通过hash表(这个概念有点大,具体原理就不在这里细说了,有时间我会单独写一遍,这是好东西)实现

var arr = [1,'b','b',4,3,3,4,5,1];Array.prototype.unique2 = function(){      var hash = {}; //定义一个hash表      var arr1 = []; //定义一个新数组      for(var i=0;i<this.length;i++){        /*          这里比较难理解,我们一步一步来看:          hash是一个对象,则存在键值对(key:value),只不过现在是为空的,所以hash[key] = value;          第一步:i=0;this[i]=this[0]=1; hash[this[0]] = hash[1] , 因为hash初始为空,没有找到key=1的值,所以然后undefined,          执行下一步:hash[1] = true(此时hash对象就有了第一组键值对),将原数组的第一个数添加到新数组中,重复第一步          因为不重复的判断hash的值都是undefined,而重复的都为true了,所以不重复都被添加到新数组中          因为hash表存的值是存的地址,放在堆内存中,所以有多少个不重复的元素,就要分多少个内存来存放,所以这种方法比较占内存,但是相比之下,这种的运算运动是最快的,          这也就是用空间来换取时间了,数据量比较小,推荐用此方法        */        if(! hash[this[i]]){          hash[this[i]] = true;          arr1.push(this[i]);        }      }      return arr1;      }    console.log(arr);    console.log(arr.unique2());            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选