www.qjdy.com-奇迹赌场 > 佳美特设计 > 返回去重后的新数组

原标题:返回去重后的新数组

浏览次数:193 时间:2019-07-12

废话相当的少说,直接拿干货!

先说说这几个实例的需求:写多少个艺术完结数组的去重。(须要:执市场价格势,传递一个数组,重返去重后的新数组,原数组不改变,完成进程中不得不用一层循环,双层嵌套循环也可写,只做参照他事他说加以考察);

先给初学者解释一下什么叫数组去重(老司机跳过):意思就是讲数组里面重复的成分去掉,例如说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());

其三种,通过遍历本身的职分是不是一致来完成

var arr = [1,'b','b',4,3,3,4,5,1];

Array.prototype.unique3 = function(){
      var arr1 = []; //定义一个新数组
      for(var i=0;i<this.length;i  ){
        if(this.indexOf(this[i])==i){
        //这里也是indexOf遍历,看从第一个元素在原数组中的位置,如果第一次出现的位置和下标相等,说明当前元素的不重复的,如果不等,说明该元素前面已经出现过
          arr1.push(this[i]);
        }
      }
      return arr1;  
    }
    console.log(arr);
    console.log(arr.unique3());

第各类,那个略带看头,只可以动用到分外场所,正是先跟数组排序,然后22相比,输出二个排序过的新数组

Array.prototype.unique4 = function(){
      /*
        这里是思路是,先排序(默认从小到大),然后将原数组的第一个给新数组,
        因为是经过排序的,所以重复的只会存在在相邻位置
        这里就相当于是做22比较,如果相等,则进行下一组,如果不相等,则把这个数存到新数组中,用这个数再进行比较
      */
      this.sort();
      var arr1 = [this[0]];
      for(var i=1;i<this.length;i  ){
        if(this[i] !== arr1[arr1.length-1]){
          arr1.push(this[i]);
        } 
      }
      return arr1;  
    }
    console.log(arr);
    console.log(arr.unique4());

哇哈,打完收工!

必要里面还说,能够动用双层嵌套循环来兑现,不能够便是用2层for循环,让每二个与原数组去相比

Array.prototype.unique5 = function(){
      //双层循环,一一比较
      for(var i=0;i<this.length;i  ){ //从0开始
        for(j= i 1;j<this.length;j  ){ //从1开始,逐个比较
          if(this[i] === this[j]){ //如果恒定
            this.splice(j,1);  //就将这个元素删掉
          } 
        } 
      }
      return this;  
    }
    console.log(arr);
    console.log(arr.unique5());

这种写法的大循环次数太多,不推荐,有人会说,第一种和第三种不也是历次都遍历一遍呢?跟第5种感到也大致吧?是的,你能那样了解,表达你知道了,不过呢,又不是特意的知情,大家说基本上那可就差太多了,indexOf()表示的是找到第2个门道特别的因素就能够

停下遍历,而第5种则是无论找不找获得,都会把全部数组遍历一次,要是数据量大,那你以为哪位品质要好一些?

极其注意的一点:如若在比较两两之间的值是全等或分裂的时候,绝对要用恒定(===)和不定点(!==),因为那会涉及到成分的类别上,如 1与'1'是不恒等的!

上边包车型客车可真是干货了,一点水分都未有,只可以靠我们温馨领会了!

你也许感兴趣的稿子:

  • JavaScript数组去重的三种艺术推荐
  • javascript数组去重小结
  • JavaScript数组去重的三种格局
  • js数组去重的5种算法完结
  • js数组去重的措施汇总
  • javascript数组去重方法汇总
  • js 数组去重的三种实用方法
  • javascript数组去重方法终极总括
  • JS数组去重与取重的演示代码
  • JavaScript常见的四种数组去重的措施

本文由www.qjdy.com-奇迹赌场发布于佳美特设计,转载请注明出处:返回去重后的新数组

关键词: mg4355登录首页

上一篇:而我所需要的是将一个对象转化成二维码

下一篇:没有了