简洁快速的数组去重

在园子看博文的时候看到有数组去重,闲来无事,想着也记录一下自己知道的几种方法。

首先简单的数组循环

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; }

  

 

  

posted @ 2018-09-25 10:18  我在广州写bug  阅读(506)  评论(0编辑  收藏  举报