• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Roséa
😘正是你花费在玫瑰上的时间才使得你的玫瑰花珍贵无比...
博客园    首页    新随笔    联系   管理    订阅  订阅
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

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

posted on 2017-01-04 18:47  Roséa  阅读(1558)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3