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

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

原文地址:https://www.cnblogs.com/anniey/p/6249786.html