数组去重方法总结

第一种

1.将数组排序成新的数组arr2
2.将数组arr2第一个放在一个空的数组当中
3.然后将arr2的值依次与相邻数组比较,如果不相同就push进去
newArr[newArr.length - 1]就是代码数组的最后一项

                var arr = [1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5]
                var time1 = new Date().getTime();
			    function unique1(arr){
				var arr2 = arr.sort();
				var newArr = [arr2[0]];
				for(var i=0;i<arr2.length;i++){
					if( arr2[i] !== newArr[newArr.length - 1]){
						newArr.push(arr2[i]);
					}
				}
				return newArr;
			}
			console.log(unique1(arr));
            console.log('1所花时间: ' + (new Date().getTime() - time1));//1
</script>

第二种

1.定义一个新的数组,并且存放原来数组的第一位
2.将原来的数组和新的数组比较,如果相同就终止比较break,如果不同就push到数组里面去
3.利用对象的key不重值 push到新的数组

            var arr = [1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5]
            var time3 = new Date().getTime(); 
            function unique3(arr){
            	var obj={};
            	var newArr=[];
            	for(var i=0;i<arr.length;i++){
            		if(!obj[arr[i]]){
            			obj[arr[i]]=1;
            			newArr.push(arr[i]);
            	}}
            return newArr;
            }
            console.log(unique3(arr));	
            console.log('3所花时间: ' + (new Date().getTime() - time3));

第三种
1.利用数组的indexOf()下标属性来查询

            var arr = [1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5]
            var time4 = new Date().getTime();
            function unique4(arr){
            	var newArr = [];
            	for(var i=0;i<arr.length;i++){
            		if(newArr.indexOf(arr[i])=== -1){
            			newArr.push(arr[i]);
            		}
            	}
            	return newArr;
            }
		    console.log(unique4(arr));
		    console.log('4所花时间: ' + (new Date().getTime() - time1));

第四种
1.利用lastIndexOf

            var time1 = new Date().getTime();
            function unique9(arr){
            	var newArr = [];
            	for(var i=0;i<arr.length;i++){
            		newArr.lastIndexOf(arr[i]) !== -1 ? '' : newArr.push(arr[i]);
            	}
            	return newArr;
            }
            console.log(unique9(arr));	
            console.log('9所花时间: ' + (new Date().getTime() - time1));

第五种
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
利用 filter和includes来过滤掉重复的数组

var time6 = new Date().getTime();
			function unique6(arr){
				var newArr = [];
				newArr = arr.filter(function(item){
				return	newArr.includes(item) ? '': newArr.push(item);
				})
				return newArr;
			}
			console.log(unique6(arr));	
			console.log('6所花时间: ' + (new Date().getTime() - time1));

第六种
1.利用数组原型对象上的forEach和includes方法

var time7 = new Date().getTime();
            function unique7(arr){
            	var newArr = [];
            	arr.forEach(function(item){
            	newArr.includes(item) ? '': newArr.push(item);
            	});
            	return newArr;
            }
            console.log(unique7(arr));	
            console.log('7所花时间: ' + (new Date().getTime() - time1));

第七种
1.利用数组原型上includes方法

var time5 = new Date().getTime();
            function unique5(arr){
            	var newArr =[];
            	for(var i=0;i<arr.length;i++){
            		if(!newArr.includes(arr[i])){
            			newArr.push(arr[i]);
            		}
            	}
            	return newArr;
            }
            console.log(unique5(arr));
            console.log('5所花时间: ' + (new Date().getTime() - time1));

第八种
1.第一个数 以此和后面的书相比,如果相等 就删了,直到比到最后一个数
2.第二个数 再依次和后面的数相比,直到最后一个数.

 var time8 = new Date().getTime();
            function unique8(arr){
            	var len = arr.length;
            	for(var i=0;i<len;i++){
            		for(var j=i+1;j<len;j++){
            			if(arr[i]==arr[j]){
            				arr.splice(j,1);
            				j--;
            				len--;
            			}
            		}
            	}
            	return arr;
            	
            }
            console.log(unique8(arr));	
            console.log('8所花时间: ' + (new Date().getTime() - time1));

第九种
1.set去重

var time10 = new Date().getTime();
            function unique10(arr){
            	return Array.from( new Set(arr));
            }
             console.log(unique10(arr));	
             console.log('10所花时间: ' + (new Date().getTime() - time1));

第十种

var time2 = new Date().getTime();
			function unique2(arr){
                  var newArr = [arr[0]];
                  for(var i= 0;i<arr.length;i++){
                  	var flag = true;
                  	for(var j=0;j<newArr.length;j++){
                  		if(arr[i] === newArr[j]){
                  			flag = false;
                  			break;
                  		}
                  	}
                  	if(flag){
                  		newArr.push(arr[i]);
                  	}
                  }
                 return newArr; 
			}
            console.log(unique2(arr));
            console.log('2所花时间: ' + (new Date().getTime() - time1));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值