在园子看博文的时候看到有数组去重,闲来无事,想着也记录一下自己知道的几种方法。
首先简单的数组循环
var arr = [1,2,3,4,5,6,1,2,3,4,5,6];
var result = [];
function arrDistinct(arr){
for(var i =0;i<arr.length;i++){
if(result.indexOf(arr[i]) == -1){
result.push(arr[i])
}
}
return result;
}
这只是针对于小型的数组好一点,可是要是数组长度大一点呢,比如创建一个50万的数组长度,那么这个方法就没那么适用了,
这时我们可以使用es6的方法
//先创建两个50万长度的数组
let arr1 = Array.from(new Array(500000),(num,index) =>{
return index
});
let arr2 = Array.from(new Array(500000),(num,index) =>{
return index
});
function arrDistinct(a,b){
return Array.from(new Set([...a],[...b]))
}
new Set是ES6提供了新的数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成Set数据结构。既然没有唯一的值,那么用来去重就在合适不过了。
接下来就是第三种去重方法
//先创建两个50万长度的数组
let arr1 = Array.from(new Array(500000),(num,index) =>{
return index
});
let arr2 = Array.from(new Array(500000),(num,index) =>{
return index
});
function arrDistinct(a,b){
let result = [];
let obj = {};
let nArr = a.concat(b);
for(let i of nArr){
if(!obj[i]){
result.push(i);
obj[i] = 1;
}
}
return result
}
再来一种就是先将数组进行排序,然后在比较和前面是否相等进行去重
let arr1 = Array.from(new Array(500000),(num,index) =>{
return index
});
let arr2 = Array.from(new Array(500000),(num,index) =>{
return index
});
function arrDistinct(a,b){
let arr3 = a.concat(b);
let result = [arr3[0]];
arr3.sort(function(a,b){
return a-b;
});
for(let i =1 ;i<arr3.length;i++){
if( arr3[i] != arr3[i-1] ){
result.push(arr3[i]);
}
}
return result;
}