国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

數(shù)組去重的各種方法速度對(duì)比

1treeS / 2571人閱讀

摘要:首先需要一個(gè)自動(dòng)生成數(shù)組的函數(shù)自動(dòng)生成數(shù)組的函數(shù)執(zhí)行上面函數(shù),的到的數(shù)組長(zhǎng)度為,因?yàn)閳?zhí)行速度很快,只有長(zhǎng)度很大時(shí),才能看到各個(gè)方法的執(zhí)行速度的差別注意到不能簡(jiǎn)單的用賦值,否則改變后,到也相應(yīng)改變了七個(gè)相同的數(shù)組并且數(shù)組長(zhǎng)度要足夠大才能對(duì)比出

首先需要一個(gè)自動(dòng)生成數(shù)組的函數(shù)
    // 自動(dòng)生成數(shù)組的函數(shù)
    function randomArr (n) {
        let arr = [];
        for (let i = 1; i <= n; i++) {
            arr.push(Math.floor(Math.random() * (i + 1)));
        }
        return arr;
    }

執(zhí)行上面函數(shù),的到的arr1數(shù)組長(zhǎng)度為50000,因?yàn)閖s執(zhí)行速度很快,只有長(zhǎng)度很大時(shí),才能看到各個(gè)方法的執(zhí)行速度的差別

注意 arr2到arr7不能簡(jiǎn)單的用賦值,否則arr1改變后,arr2到arr7也相應(yīng)改變了

    // 七個(gè)相同的數(shù)組 并且數(shù)組長(zhǎng)度要足夠大才能對(duì)比出來(lái)
    var n = 50000;
    var arr1 = randomArray(n);
    var arr2 = [...arr1];
    var arr3 = [...arr1];
    var arr4 = [...arr1];
    var arr5 = [...arr1];
    var arr6 = [...arr1];
    var arr7 = [...arr1];
接下來(lái)是數(shù)組去重的各種方式
    /**
     * 數(shù)組去重方法1: 有相同就跳過(guò)
     */
    function unique (arr) {
        var len = arr.length;
        var newArr = [];
        for (var i = 0; i < len; i++) {
            for (var j = i + 1; j < len; j++) {
                if (arr[i] === arr[j]) {
                    j = ++i;
                }
            }
            newArr.push(arr[i]);
        }
        return newArr;
    }

    /**
     * 數(shù)組去重方法2:有相同就刪除后面的
     */
    function unique2 (arr) {
        var len = arr.length;
        for (var i = 0; i < len; i++) {
            for (var j = i + 1; j < len; j++) {
                if (arr[i] === arr[j]) {
                    arr.splice(j, 1);
                    j--;
                    len--;
                }
            }
        }
        return arr;
    }

    /**
     * 數(shù)組去重方法3:利用對(duì)象屬性不能相同去重
     */
    function unique3 (arr) {
        var obj = {}, newArr = [];
        for (var i = 0; i < arr.length; i++) {
            if (!obj[arr[i]]) {
                obj[arr[i]] = 1;
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }

    /**
     * 數(shù)組去重方法4:數(shù)組遞歸去重
     */
    function unique4 (arr) {
        arr.sort();
        var len = arr.length;
        for (var i = 0; i < len - 1; i++) {
            if (arr[i] === arr[i + 1]) {
                arr.splice(i + 1, 1);
                i--;
                len--;
            }
        }
        return arr;
    }

    /**
     * 數(shù)組去重方法5:indexOf/forEach/map/filter
     */
    function unique5 (arr) {
        var newArr = [];
        arr.forEach(function(item, index, arr){
            // if(newArr.indexOf(item)===-1){
            //     newArr.push(item);
            // }
            if (arr.indexOf(item, index + 1) === -1) {
                newArr.push(item);
            }
        });
        return newArr;
    }

    /**
     * 數(shù)組去重方法6:es6 new Set()
     */
    function unique6 (arr) {
        // return [...new Set(arr)];
        return Array.from(new Set(arr));
    }

    /**
     * 數(shù)組去重方法7:es6 [...]
     */
    function unique7 (arr) {
        return [...new Set(arr)];
    }
計(jì)算各個(gè)方法所花費(fèi)的時(shí)間

最后,需要一個(gè)函數(shù)調(diào)用以上數(shù)組去重的方法,并進(jìn)行時(shí)間計(jì)算

    // 計(jì)算時(shí)間
    function calcRunTime (func, arr) {
        console.time("testForEach");
        var array = func(arr);
        console.timeEnd("testForEach");
        console.log(array);
    }
    
    // 開(kāi)始計(jì)算
    calcRunTime(unique,arr1);
    calcRunTime(unique2,arr2);
    calcRunTime(unique3,arr3);
    calcRunTime(unique4,arr4);
    calcRunTime(unique5,arr5);
    calcRunTime(unique6,arr6);
    calcRunTime(unique7,arr7);
計(jì)算結(jié)果來(lái)了

unique: 2921.845947265625ms
unique2: 3580.632080078125ms
unique3: 12.416259765625ms
unique4: 617.23779296875ms
unique5: 2497.0478515625ms
unique6: 20.821044921875ms
unique7: 12.881103515625ms

小結(jié)

可以看出:

第6種和第7種方法利用es6語(yǔ)法去重,不僅代碼簡(jiǎn)單,執(zhí)行速度也快

利用對(duì)象key值的唯一性去重,執(zhí)行速度也是很快的,其它方法就比較劣勢(shì)了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97823.html

相關(guān)文章

  • js基本操作-數(shù)組去重

    摘要:基本操作數(shù)組去重寫(xiě)在前面數(shù)組去重經(jīng)常出現(xiàn)在前端招聘的筆試題里,比如有數(shù)組,請(qǐng)用實(shí)現(xiàn)去重函數(shù),使得返回作為筆試題,考點(diǎn)有二正確。基本介紹文章主要是對(duì)數(shù)組去重的常用方法進(jìn)行介紹。 js基本操作-數(shù)組去重 寫(xiě)在前面 JavaScript 數(shù)組去重經(jīng)常出現(xiàn)在前端招聘的筆試題里,比如: 有數(shù)組 var arr = [a, b, c, 1, 0, c, 1, , 1, 0],請(qǐng)用 JavaScr...

    blastz 評(píng)論0 收藏0
  • JS進(jìn)階篇5---JS數(shù)組重的n種方式

    1、利用 indexOf() 方法之一 Array.prototype.unique = function(){ var temp = []; for (var i = 0;i < this.length;i++){ // 如果當(dāng)前數(shù)組的第 i 項(xiàng)已經(jīng)保存到了臨時(shí)數(shù)組,那么跳過(guò) if(temp.indexOf( this[i] ) == -1){ ...

    baihe 評(píng)論0 收藏0
  • 數(shù)組重的JavaScript實(shí)現(xiàn)

    摘要:主要用到數(shù)組的方法。第一種方式是判斷數(shù)組中的第一索引號(hào)等于參數(shù)索引號(hào),一般來(lái)說(shuō),如果數(shù)組元素重復(fù),除第一個(gè)元素外,所有重復(fù)元素的索引和該元素對(duì)應(yīng)的第一索引是不同的。 1.最簡(jiǎn)方法 創(chuàng)建一個(gè)空的新數(shù)組,依次檢查舊數(shù)組的值是否存在于新數(shù)組中,如果不存在就push進(jìn)去。主要用到數(shù)組的indexOf方法。 function arrUnique(arr){ ...

    Imfan 評(píng)論0 收藏0
  • JavaScript專(zhuān)題之數(shù)組去重

    摘要:專(zhuān)題系列第三篇,講解各種數(shù)組去重方法,并且跟著寫(xiě)一個(gè)前言數(shù)組去重方法老生常談,既然是常談,我也來(lái)談?wù)劇K?lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。 JavaScript 專(zhuān)題系列第三篇,講解各種數(shù)組去重方法,并且跟著 underscore 寫(xiě)一個(gè) unique API 前言 數(shù)組去重方法老生常談,既然是常談,我也來(lái)談?wù)劇?雙層循環(huán) 也許我們首先想到的是使用 indexOf 來(lái)循...

    fsmStudy 評(píng)論0 收藏0
  • javascript數(shù)組去重

    摘要:數(shù)組去重雙層循環(huán)使用雙層嵌套循環(huán)是最原始的方法用來(lái)存儲(chǔ)結(jié)果如果是唯一的,那么執(zhí)行完循環(huán),等于外層循環(huán)內(nèi)層循環(huán)當(dāng)和相等時(shí),跳出循環(huán)。否則說(shuō)明元素唯一,這時(shí)成立,將此元素添加到中。它類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。 JavaScript數(shù)組去重 雙層循環(huán) 使用雙層嵌套循環(huán)是最原始的方法: var array = [a,b,a]; function unique(arra...

    qylost 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<