zoukankan      html  css  js  c++  java
  • Js删除数组重复元素的多种方法

      js对数组元素去重有很多种处理的方法,本篇文章中为网络资源整理,当然每个方法我都去实现了;写下来的目的是希望自己活学活用,下次遇到问题后方便解决。

    第一种

     1 function oSort(arr){
     2     var result={};
     3     var newArr=[];
     4     for(var i=0;i<arr.length;i++){
     5         if(!result[arr[i]]){
     6             console.log(result[arr[i]]); //看看输出的是什么
     7             newArr.push(arr[i]);
     8             result[arr[i]]=1;
     9         }
    10     }
    11     console.log(newArr);
    12 }
    13 var st=['a','a','b','a','c','d'];
    14 oSort(st);

    以上代码输出  ["a", "b", "c", "d"]

    第二种

      备注:遍历要删除的数组st, 把元素分别放入另一个数组tmp中,在判断该元素在st中不存在才允许放入tmp中
     1 function unique(st){
     2     var tmp=[];
     3     for(var i in st){
     4         if(tmp.indexOf(st[i]) == -1){
     5             tmp.push(st[i]);
     6         }
     7     }
     8     return tmp;
     9 }
    10 var arr=['aa','ab','b','aa','c','d'];
    11 console.log(unique(arr));

    以上代码输出 ["aa", "ab", "b", "c", "d"]

    说明一下,当arr.indexOf()未找到元素时返回-1

    第三种

      备注:把目标数组st的元素值和键的位置调换 自动就把重复的元素给删除掉了
     1 function unique(st){
     2     var tmp=new Array();
     3     for(var i in st){
     4         tmp[st[i]]=1;
     5     }
     6     var tmparr=new Array();
     7     for(var j in tmp){
     8         tmparr.push(j);
     9     }
    10     console.log(tmp);//看看这里输出了什么
    11     return tmparr;
    12 }
    13 var st=['aa','ab','b','aa','c','d'];
    14 console.log(unique(st));

    以上代码输出 ["aa", "ab", "b", "c", "d"]

    第四种

     1 function unique(st){
     2     st=st||[];
     3     var al={};
     4     for(var i=0;i<st.length;i++){
     5         var j=st[i];
     6         if(typeof (al[j]) =='undefined'){
     7             al[j]=1;
     8         }
     9     }
    10     st.length=0;
    11     for(var i in al){
    12         st[st.length]=i;
    13     }
    14     return st;
    15 }
    16 var arr=['aa','ab','b','aa','c','d'];
    17 console.log(unique(arr));

    以上代码输出 ["aa", "ab", "b", "c", "d"]

    第五种

      备注:使用原型的方法来发散思维,原博主还是很赞。

     1 //数组去重的方法
     2 Array.prototype.unique=function(){
     3     //集中声明变量
     4     var 
     5       oldArr=this,
     6       newArr=[oldArr[0]],
     7       len=oldArr.length,
     8       i=1;
     9       
    10     //过滤空数组
    11     if(!len) return this;
    12     
    13     //过滤重复元素
    14     for(;i<len;i++){
    15        newArr.indexOf(oldArr[i])<0 ? newArr.push(_this) : '';  
    16     }
    17     //返回过滤后的数组没有影响原数组
    18     return newArr;
    19 }
    20 var arr=['a','a','b','a','c','d'];
    21 console.log(arr.unique());//["a", "b", "c", "d", unique: function]

     上面有提到 indexOf() 方法, 可以看看我的另外一篇文章简单了解JS 中的indexOf方法

    综合以上多种数组去重方法,其实方法都是很类似的;就是个别方法与众不同,有时间再来研究其中道理。
    附上原文链接:http://www.cnblogs.com/yy-hh/p/4591852.html#3304504

    如有疑问之处,欢迎指点,我会及时更正,谢谢!

  • 相关阅读:
    Hadoop1重新格式化HDFS
    centos6.5之Hadoop1.2.1完全分布式部署安装
    Mybatis延迟加载和查询缓存
    剑指offer面试题7:用两个栈实现队列
    Mybatis输入输出映射
    Mybatis开发Dao
    Mybatis入门程序
    SpringMVC系列之URL匹配问题
    SpringMVC系列之主要组件
    mysql学习笔记(三)
  • 原文地址:https://www.cnblogs.com/anniey/p/6249786.html
Copyright © 2011-2022 走看看