js数组去重

数组去重是一个比较古老的话题,当然也是很经典的一个js不朽话题,今天项目又用到了数组去重,我们就老生常谈一下此话题;

方法1: 利用indexof判断新数组中是否包含老数组中的元素,没有就push

 1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
 2         //利用indexOf
 3         function unique(arr){
 4             var newArr=[];
 5             for(var i=0;l=arr.length,i<l;i++){
 6                 if(newArr.indexOf(arr[i])==-1){
 7                     newArr.push(arr[i]);
 8                 }
 9             }
10             return newArr;
11         }
12         console.log(unique(arr));
13         //[1, 2, 22, 33, 333, "苹果", "香蕉"]

方法2:利用下标,通过indexof判断,如果第i项第一次出现的索引是i,那么就添加到新数组,否则就在新数组中存在,不添加

 1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
 2         //利用下标加indexOf
 3         function unique1(arr){
 4             var newArr=[arr[0]];
 5             for(var i=1;l=arr.length,i<l;i++){
 6                 if(arr.indexOf(arr[i])==i){
 7                     newArr.push(arr[i])
 8                 }
 9             }
10             return newArr;
11         }
12         console.log(unique1(arr));
13         //[1, 2, 22, 33, 333, "苹果", "香蕉"]

 方法3:据说是最快去重方法,构建一个对象,利用key value来去重

 1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
 2         //对象键值去重
 3         function unique2(arr){
 4             var newObj={},newArr=[],type,val;
 5             for(var i=0;l=arr.length,i<l;i++){
 6                 val=arr[i];
 7                 type=typeof val;
 8                 console.log(type);
 9                 if(!newObj[val]){
10                     newObj[val]=[type];
11                     newArr.push(val);
12                 }else if(newObj[val].indexOf(type)<0){
13                     newObj[val].push(type);
14                     newArr.push(val);
15                 }
16             }
17             return newArr;
18         }
19         console.log(unique2(arr));
20        //[1, 2, 22, 33, 333, "苹果", "香蕉"]

方法4:双重遍历去重

 1 //双重遍历去重
 2         var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
 3         function unique3(arr){
 4             var newArr=[];
 5             for(var i=0;l=arr.length,i<l;i++){
 6                 for(var j=i+1;j<l;j++){
 7                     if(arr[i]===arr[j]){
 8                         j= ++i;        
 9                     }
10                 }
11                 newArr.push(arr[i]);
12             }
13             return newArr;
14         }
15         console.log(unique3(arr));
16         //[1, 2, 22, 33, 333, "苹果", "香蕉"]

方法5:如果你使用了jQuery那么恭喜你 ,去重很简单,因为jQuery有为此准备api,但是切记先把jQuery引入

1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
2         //jquery unique方法
3         console.log($.unique(arr));
4       //[1, 2, 22, 33, 333, "苹果", "香蕉"]

好了,目前就这些,有其他好的办法大家也可以评论告诉我下,等有了新方法在给大家更。。。

 //[1, 2, 22, 33, 333, "苹果", "香蕉"]
原文地址:https://www.cnblogs.com/fuzitu/p/7366776.html