Array去重探究

如何高效简洁地去重?从下面两个角度考虑:

1.借助js对象key唯一的特性去重

2.借助Array自身方法遍历、操作Array

 

第一种方法最简洁,局限是使用了Array自身方法就必须承受filter不改变原数组的特点。

 

 1              function uniq1(arr){
 2                 var obj = {};
 3                 return arr.filter(function(item,index,arr){
 4                     if(obj.hasOwnProperty(item)){  //重复了
 5                         return false;
 6                     } else {
 7                         obj[item] = true;
 8                         return true;
 9                     }
10                 });
11             }

 

 

所以有了第二种方法,我们自己来对数组筛选,满足一切去重的自定义要求。这里使用splice是对原数组进行元素删除,使得可以改变原数组。删除元素引起数组下标发生变化,所以第六行把i--。这种情况不能使用forEach遍历,因为该方法中的index貌似是只读的。

 1         function uniq2(arr){
 2                 var obj = {};
 3                 for(i=0;i<arr.length;i++){
 4                     if(obj.hasOwnProperty(arr[i])){  //重复了
 5                         arr.splice(i,1);
 6                         i--;  //不加这行代码会每次漏掉一个元素
 7                     } else {
 8                         obj[arr[i]] = true;
 9                     }    
10                 }
11                 return arr;
12             }

 

posted @ 2016-01-10 15:34  海绵小猪  阅读(326)  评论(0编辑  收藏  举报