数组去重是一个比较古老的话题,当然也是很经典的一个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, "苹果", "香蕉"]