简洁快速的数组去重
在园子看博文的时候看到有数组去重,闲来无事,想着也记录一下自己知道的几种方法。
首先简单的数组循环
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; }
悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。