js中數組去重方法及性能對比


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM