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
如有疑问之处,欢迎指点,我会及时更正,谢谢!