高效率数组去重

高效率数组去重
这里我创健了一个15w并有5w重复数据的数组进行测试

var arr1 = Array.from(new Array(100000), (x, index)=>{
    return index;
})
var arr2 = Array.from(new Array(50000), (x, index)=>{
    return index + index;
})
var arr = arr1.concat(arr2);

方案一
双for循环进行比较,对相同的数据进行splice删除

console.time("label1");
function text1 () {
	for(var i = 0 ; i < arr.length ; i++){
		for(var j = i+1 ; j < arr.length ; j++){
			if(arr[i] == arr[j]){
				arr.splice(j,1);
				j--;
			}
		}
	}
	console.log(arr);
}
text1(arr);
console.timeEnd("label1");

在这里插入图片描述
方案二
建立空数组储存未重复的数据,利用indexof的特性来完成去重

console.time("label2");
function text2 () {
	var new_arr = [];
	for(var i = 0 ; i < arr.length ; i++){
		if(new_arr.indexOf(arr[i]) == -1 ){
			new_arr.push(arr[i]);
		}
	}
	console.log(new_arr);
}
text2(arr);
console.timeEnd("label2");

在这里插入图片描述
上面两种方案由于去重时比较次数过多,所以都效率都很低
而下面的方案较好,为了差距明显化,我提高了10倍的数据量
方案三
hash验证去重

console.time("label3");
function text3 (arr) {
	console.log(arr);
	for(var i = 0 ,new_arr = [] , hash = [] ; i < arr.length ; i++){
		if(hash[arr[i]] === undefined){
			hash[arr[i]] = true;
			new_arr[new_arr.length] = arr[i];
		}
	}
	console.log(new_arr);
}
text3(arr);
console.timeEnd("label3");

在这里插入图片描述
方案四
利用ES6新的数据结构set,它的成员都是唯一的,没有重复的值

console.time("label4");
function text4 () {
	console.log(arr);
	var new_arr = [...new Set(arr)];
	console.log(new_arr);
}
text4(arr);
console.timeEnd("label4");

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值