JavaScript数组去重算法实例

作者: a333661d6d6e | 来源:发表于2018-11-22 21:17 被阅读2次

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写、遍历、比较、排序等操作及算法改进相关实现技巧,需要的朋友可以参考下

    测试用例:

    arr = ["1",3,"1",1,4,5,1,"2",5,1,{"name":"li","age":20},2,4,3,{"name":"li","age":20},""];
    

    方法一:借助于临时数组与indexOf , 算法复杂度为:O(n^2)

    function unique1(arr){
      var temp = [];
      for(var i=0; i<arr.length; i++){
        if(temp.indexOf(arr[i]) == -1){
          temp.push(arr[i]);
        }
      }
      return temp;
    }
    

    测试结果:

    unique1(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, Object { name="li", age=20}, ""]
    

    bug 无法区分对象
    方法二 : 用JavaScript中的Object对象来当作hash表

    function unique2(arr){
      var temp=[];
      var hash={};
      for(var i=0; i<arr.length;i++){
        if(!hash[arr[i]]){
          hash[arr[i]]=true;
          temp.push(arr[i]);
        }
      }
      return temp;
    }//欢迎加入全栈开发交流圈一起学习交流:864305860
    

    测试结果:

    unique2(arr) : ["1", 3, 4, 5, "2", Object { name="li", age=20}, ""]
    

    bug : 无法区分: 1 和 "1"
    修改

    function unique2(arr){
      var temp=[];
      var hash={};
      for(var i=0; i<arr.length;i++){
          var item = arr[i];
        var key = typeof(item)+item;
        if(!hash[key]){
          hash[key]=true;
          temp.push(arr[i]);
        }//欢迎加入全栈开发交流圈一起学习交流:864305860
      }//面向1-3年前端人员
      return temp;//帮助突破技术瓶颈,提升思维能力
    }
    

    测试结果:

    unique2(arr) : ["1", 3, 1, 4, 5, "2", Object { name="li", age=20}, 2, ""]
    

    方法三:先用sort对数组排序,然后借助临时数组,存储相同元素的最后一个,该方法只能用于纯Number类型数组

    function unique3(arr){
      arr.sort(function(a,b){
        return a-b;
      });
      var temp = [];
      for(var i=0;i<arr.length;i++){
        if(arr[i] !== arr[i+1]){
          temp.push(arr[i]);
        }
      }//欢迎加入全栈开发交流圈一起学习交流:864305860
      return temp;//面向1-3年前端人员
    }//帮助突破技术瓶颈,提升思维能力
    

    结语

    感谢您的观看,如有不足之处,欢迎批评指正。

    本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
    对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
    最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

    相关文章

      网友评论

        本文标题:JavaScript数组去重算法实例

        本文链接:https://www.haomeiwen.com/subject/pfvlqqtx.html