zoukankan      html  css  js  c++  java
  • JS实现数组去重方法总结(三种常用方法)

    方法一:

    双层循环,外层循环元素,内层循环时比较值

    如果有相同的值则跳过,不相同则push进数组

    Array.prototype.distinct = function(){

     var arr = this,result = [], i,j,len = arr.length;

     for(i = 0; i < len; i++){

     for(j = i + 1; j < len; j++){

       if(arr[i] === arr[j]){

        j = ++i;

       }

     }

     result.push(arr[i]);

     }

     return result;

    }

    var arra = [1,2,3,4,4,1,1,2,1,1,1];

    arra.distinct();    //返回[3,4,2,1]

    方法二:利用splice直接在原数组进行操作

    双层循环,外层循环元素,内层循环时比较值

    值相同时,则删去这个值

    注意点:删除元素之后,需要将数组的长度也减1.

    Array.prototype.distinct = function (){

     var arr = this,i,j,len = arr.length;

     for(i = 0; i < len; i++){

     for(j = i + 1; j < len; j++){

       if(arr[i] == arr[j]){

        arr.splice(j,1);

        len--;

        j--;

       }

     }

     }

     return arr;

    };

    var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];

    var b = a.distinct();

    console.log(b.toString()); //1,2,3,4,5,6,56

    优点:简单易懂

    缺点:占用内存高,速度慢

     方法三:利用对象的属性不能相同的特点进行去重

    Array.prototype.distinct = function (){

     var arr = this,i,obj = {},result = [],len = arr.length;

     for(i = 0; i< arr.length; i++){

     if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了

       obj[arr[i]] = 1;

       result.push(arr[i]);

     }

     }

     return result;

    };

    var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];

    var b = a.distinct();

    console.log(b.toString()); //1,2,3,4,5,6,56

  • 相关阅读:
    线程池的优雅关闭实践
    InheritableThreadLocal原理解析
    线程池踩坑
    两个线程通讯(生产-卖面包问题)
    谈谈redis的热key问题如何解决
    中国软件杯选题A1数据智能分析报告系统
    《程序员的思维修炼》读后感
    《算法导论》读后感
    《重构》读后感
    《代码整洁之道》读后感
  • 原文地址:https://www.cnblogs.com/NatChen/p/9818705.html
Copyright © 2011-2022 走看看