js數組去重

1、遍歷數組,並結合 indexOf 來排除重複項

var oldArr = []
        for (var i = 0; i < 100000; i++) {
            oldArr.push(i)
        }
        var start = new Date().getTime()
        console.log('開始', start)

        // 數組去重
        var newarr = [1, 2, 3, 2, 2, 2, 23, 4, 23, 23, 23, 1, 3, 45, 66, 34, 24, 2445, 145, 145, 156, 24, 6, 44, 246, 1463, 363];
        var arr = newarr.concat(oldArr)
        arr.filter((item, index) => {
            return arr.indexOf(item) === index
        })

        var end = new Date().getTime()
        console.log('耗時:', end - start, end)

目前數據量處理時間爲8494

2、雙重 for 循環

 var oldArr = []
        for (var i = 0; i < 100000; i++) {
            oldArr.push(i)
        }
        var start = new Date().getTime()
        console.log('開始', start)

        // 數組去重
        var newarr = [1, 2, 3, 2, 2, 2, 23, 4, 23, 23, 23, 1, 3, 45, 66, 34, 24, 2445, 145, 145, 156, 24, 6, 44, 246, 1463, 363];
        var arr = newarr.concat(oldArr)
        for (let i = 0, len = arr.length; i < len; i++) {
            for (let j = i + 1; j < len; j++) {
                if (arr[i] == arr[j]) {
                    arr.splice(j, 1);
                    // splice 會改變數組長度,所以要將數組長度 len 和下標 j 減一
                    len--;
                    j--;
                }
            }
        }

        var end = new Date().getTime()
        console.log('耗時:', end - start, end)

同樣數據,耗時:11976 

3、for...of + includes()

var oldArr = []
        for (var i = 0; i < 100000; i++) {
            oldArr.push(i)
        }
        var start = new Date().getTime()
        console.log('開始', start)

        // 數組去重
        var newarr = [1, 2, 3, 2, 2, 2, 23, 4, 23, 23, 23, 1, 3, 45, 66, 34, 24, 2445, 145, 145, 156, 24, 6, 44, 246, 1463, 363];
        var arr = newarr.concat(oldArr)
        let result = []
        for (let i of arr) {
            !result.includes(i) && result.push(i)
        }

        var end = new Date().getTime()
        console.log('耗時:', end - start, end)

時長和上個接近

4、Array.sort()

首先使用 sort() 將數組進行排序,然後比較相鄰元素是否相等,從而排除重複項

var oldArr = []
        for (var i = 0; i < 100000; i++) {
            oldArr.push(i)
        }
        var start = new Date().getTime()
        console.log('開始', start)

        // 數組去重
        var newarr = [1, 2, 3, 2, 2, 2, 23, 4, 23, 23, 23, 1, 3, 45, 66, 34, 24, 2445, 145, 145, 156, 24, 6, 44, 246, 1463, 363];
        var arr = newarr.concat(oldArr)
        arr = arr.sort()
        let result = [arr[0]]

        for (let i = 1, len = arr.length; i < len; i++) {
            arr[i] !== arr[i - 1] && result.push(arr[i])
        }

        var end = new Date().getTime()
        console.log('耗時:', end - start, end)

耗時 32  很少了已經

5、new Set()

 var oldArr = []
        for (var i = 0; i < 100000; i++) {
            oldArr.push(i)
        }
        var start = new Date().getTime()
        console.log('開始', start)

        // 數組去重
        var newarr = [1, 2, 3, 2, 2, 2, 23, 4, 23, 23, 23, 1, 3, 45, 66, 34, 24, 2445, 145, 145, 156, 24, 6, 44, 246, 1463, 363];
        var arr = newarr.concat(oldArr)
        Array.from(new Set(arr))

        var end = new Date().getTime()
        console.log('耗時:', end - start, end)

耗時已經很少了和上個很接近

6、for...of + Object

for 循環遍歷,利用對象的屬性不會重複這一特性,校驗數組元素是否重複

var oldArr = []
        for (var i = 0; i < 100000; i++) {
            oldArr.push(i)
        }
        var start = new Date().getTime()
        console.log('開始', start)

        // 數組去重
        var newarr = [1, 2, 3, 2, 2, 2, 23, 4, 23, 23, 23, 1, 3, 45, 66, 34, 24, 2445, 145, 145, 156, 24, 6, 44, 246, 1463, 363];
        var arr = newarr.concat(oldArr)
        let result = []
        let obj = {}

        for (let i of arr) {
            if (!obj[i]) {
                result.push(i)
                obj[i] = 1
            }
        }

        var end = new Date().getTime()
        console.log('耗時:', end - start, end)

耗時25  

總結:最後三種還是比較值得推薦的,如果你的數據更大,還是對比一下看看

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章