嵌套數(shù)組扁平化和數(shù)組去重性能檢測

前言:

常規(guī)的數(shù)組扁平化的寫法以及常見的面試中數(shù)組去重的幾種寫法,順便記錄一下數(shù)組去重的性能分析,特別是面對大量數(shù)據(jù)的操作,方便以后在項目中更高效的使用.

數(shù)組扁平化的常規(guī)寫法跟es6寫法比較

常規(guī)寫法:(扁平化,去重,排序)
    let arr = [
        [1, 2, 2],
        [3, 4, 5, 5],
        [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
    ];
    //實現(xiàn)數(shù)組扁平化,正常思路
    function flat1(arr) {
        //扁平化數(shù)組
        let arr1 = arr.toString().split(',')
            //數(shù)組排序
        console.log(arr1) // ["1", "2", "2", "3", "4", "5", "5", "6", "7", "8", "9", "11", "12", "12", "13", "14", "10"]
        let arr2 = arr1.map(it => Number(it)).sort((a, b) => {
            return a - b
        });
        console.log(arr2); // [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14]
        //數(shù)組去重
        for (let i = 0; i < arr2.length; i++) {
            if (arr2[i] === arr2[i + 1]) {
                arr2.splice(i, 1);
                i--
            }
        }
        console.log(arr2); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    }
es6(arr.flat)
    //es6數(shù)組扁平化 去重,  排序
    var arrNew = Array.from(new Set(arr.flat(Infinity))).sort((a, b) => {
        return a - b
    });
    console.log(arrNew); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

數(shù)組去重的幾種常規(guī)方法跟性能檢測(高性能數(shù)組去重)

首先我們先構造兩個數(shù)據(jù)量比較大的數(shù)據(jù)數(shù)組,然后拼接起來構造重復項,然后拿到去重前后的時間戳,然后比較不同方法的耗時.
    let arr1 = Array.from(new Array(100000), (x, index) => {
        return index;
    })

    let arr2 = Array.from(new Array(80000), (x, index) => {
        return index;
    })

    let startTime = new Date().getTime();

    console.log('去重后的數(shù)組長度 =', dupliate(arr1, arr2).length)

    let endTime = new Date().getTime();

    console.log('耗費時長 =', (endTime - startTime));
1.filter加indexOf數(shù)組去重
    //1.filter加indexOf數(shù)組去重
    function dupliate(arr1, arr2) {
        let arr = arr1.concat(arr2)
        return arr.filter((item, index) => {
            return arr.indexOf(item) === index;
        })
    }
filter加indexOf數(shù)組去重.jpeg
2.雙重for循環(huán)數(shù)組去重
    function dupliate(arr1, arr2) {
        let arr = arr1.concat(arr2);
        for (let i = 0; i < arr.length; i++) {
            for (let j = i + 1; j < arr.length; j++) {
                if (arr[i] === arr[j]) {
                    arr.splice(j, 1);
                    j--; //數(shù)組長度改變 下標自減
                }
            }
        }
        return arr;
    }
雙重for循環(huán)數(shù)組去重.jpeg
3.利用sort進行數(shù)組去重
 function dupliate(arr1, arr2) {
        let arr = arr1.concat(arr2);
        let arr3 = arr.sort();
        let result = [];
        for (let i = 0; i < arr3.length; i++) {
            if (arr3[i] !== arr3[i + 1]) {
                result.push(arr3[i])
            }
        }
        return result;
    }
sort排序數(shù)組去重.jpeg
4.es6 new Set()
   function dupliate(arr1, arr2) {
        let arr = arr1.concat(arr2);
        let result = Array.from(new Set(arr));
        return result;
    }
new Set數(shù)組去重.jpeg
5.for...of語句和object的使用
    function dupliate(arr1, arr2) {
        let arr = arr1.concat(arr2);
        let result = [];
        let obj = {};
        for (let item of arr) {
            if (!obj[item]) {
                result.push(item);
                obj[item] = 1;
            }
        }
        return result;
    }
for...of和object數(shù)組去重.jpeg

總結:以上就是常見幾種數(shù)組去重寫法在十萬條數(shù)據(jù)量的性能檢測,我們可以根據(jù)項目的實際需要以及我們使用的數(shù)據(jù)復雜度更好的去應用在項目開發(fā)中.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容