js中数组去重方法及性能对比

时间:2022-03-28 19:59:14

js中数组的

数组去重

常用的数组去重方法以及效率分析:

首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000。具体的生成数组的方法如下:

function buildDataArr (size) {
var array = [];
for (var i =0; i< size; i++) {
var num = Math.round(Math.random() * size);
array.push(num);
}
return array;
}
var arr1 = buildDataArr(1000);
var arr2 = buildDataArr(10000);
var arr3 = buildDataArr(100000);
var arr4 = buildDataArr(500000);
  • 通过使用filter和index 方法进行去重

    function distinct(numberArr) {
    return numberArr.filter((item, index)=> {
    return numberArr.indexOf(item) === index
    })
    }
  • 通过使用双重循环进行数组去重

    function distinctFor(numberArr) {
    for (let i=0, len=numberArr.length; i<len; i++) {
    for (let j=i+1; j<len; j++) {
    if (numberArr[i] == numberArr[j]) {
    numberArr.splice(j, 1);
    // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
    len--;
    j--;
    }
    }
    }
    return numberArr
    }
  • 通过使用for…of 和include进行去重

    function distinctInclude(numberArr) {
    let result = []
    for (let i of numberArr) {
    !result.includes(i) && result.push(i)
    }
    return result
    }
  • 使用sort进行去重

    function distinctSort(numberArr) {
    numberArr = numberArr.sort()
    let result = [numberArr[0]] for (let i=1, len=numberArr.length; i<len; i++) {
    numberArr[i] !== numberArr[i-1] && result.push(numberArr[i])
    }
    return result
    }
  • 使用 new Set进行去重

    function distinctSet(numberArr) {
    return Array.from(new Set(numberArr))
    }
  • 使用对象进行去重

    function distinctObj(numberArr) {
    let result = []
    let obj = {}
    for (var i of numberArr) {
    if (!obj[i]) {
    result.push(i)
    obj[i] = 1
    }
    }
    return result
    }

好了上面的方法介绍完了,我们来看一下性能:

1000 10000 100000 500000
distinctFilter 0 40 3992 105859
distinctFor 2 59 5873 147234
distinctInclude 1 24 2320 54794
distinctSort 1 8 69 264
distinctSet 0 1 12 78
distinctObj 1 1 9 33