亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS數(shù)組去重

ymyang / 3428人閱讀

摘要:這種方式比使用的一般姿勢要快,比使用表的最快姿勢要慢,但是占用內(nèi)存要少主要內(nèi)容來自數(shù)組去重的正確編寫姿勢

不賣關(guān)子,直入主題

數(shù)組去重,最先想到的便是依次遍歷數(shù)組,在已遍歷的元素中查找是否存在當前數(shù)組元素,重點是用什么存放已遍歷的數(shù)組,以及如何區(qū)分當前元素是否已存在

由于下面會用到indexOf()的方法,它是ES5語法,低版本會存在兼容,先應(yīng)添加對應(yīng)的polyfill

Array.prototype.indexOf = Array.prototype.indexOf || function (searchElement, fromIndex) {
    var index = -1;
    fromIndex = fromIndex * 1 || 0;
    for (var k = 0, length = this.length; k < length; k++) {
        if (k >= fromIndex && this[k] === searchElement) {
            index = k;
            break;
        }
    }
    return index;
};

1.數(shù)組存放,indexOf()判斷

遍歷數(shù)組,建立新數(shù)組,利用indexOf判斷是否存在于新數(shù)組中,不存在則push到新數(shù)組,最后返回新數(shù)組

Array.prototype.unique = function() {
    var n = []; // 存放已遍歷的滿足條件的元素
    for (var i = 0; i < this.length; i++) {
        // indexOf()判斷當前元素是否已存在
        if (n.indexOf(this[i]) == -1) n.push(this[i]);
    }
    return n;
}

下面是一個思想基本相同的變相版本

Array.prototype.unique = function() {
    // 創(chuàng)建一個新的臨時數(shù)組,并且把當前數(shù)組的第一元素存入到數(shù)組中
    var n = [this[0]]; 
    // 從第二項開始遍歷
    for (var i = 1; i < this.length; i++) 
    {
        // 如果當前數(shù)組的第i項在當前數(shù)組中第一次出現(xiàn)的位置不是i,那么表示第i項是重復(fù)的,忽略掉,否則存入結(jié)果數(shù)組
        if (this.indexOf(this[i]) == i) n.push(this[i]);
    }
    return n;
}

JS引擎在實現(xiàn)indexOf()的時候會遍歷數(shù)組直到找到目標為止,此函數(shù)會浪費掉很多時間。所有這兩種方式都不是最優(yōu)的解決方式

// es5簡化版
Array.prototype.unique = function() {
    return this.filter((v, i) => this.indexOf(v) === i)
}
// es6簡化版
Array.prototype.unique = function() {
    return Array.from(new Set(this));
}
// 或
Array.prototype.unique = function() {
    return [...new Set(this)];
}

2.對象存放,哈希算法(映射)判斷

Array.prototype.unique = function() {
    // n為hash表,r為臨時數(shù)組
    var n = {}, r = [];
    for (var i = 0; i < this.length; i++) {
        // 如果hash表中沒有當前項
        if (!n[this[i]]) {
            // 存入hash表
            n[this[i]] = true;
            // 把當前數(shù)組的當前項push到臨時數(shù)組里面
            r.push(this[i]); 
        }
    }
    return r;
}

但從耗時的角度來講,這是最優(yōu)的一種解決方式。但是從內(nèi)存占用角度來說,這并不是最優(yōu)的,因為多了一個hash表。這就是所謂的空間換時間

3.先排序,后比較

這種方式最大的優(yōu)勢就是排序后的比較次數(shù)變少,但是排序的過程也有性能消耗,應(yīng)權(quán)衡使用

Array.prototype.unique = function() {
    this.sort();
    var re = [this[0]];
    for (var i = 1; i < this.length; i++) {
        if (this[i] !== re[re.length - 1]) {
            re.push(this[i]);
        }
    }
    return re;
}

這個方法的思路是先把數(shù)組排序,然后比較相鄰的兩個值。排序的時候用的JS原生的sort()方法,JS引擎內(nèi)部應(yīng)該是用的快速排序吧。這種方式比使用indexOf()的一般姿勢要快,比使用hash表的最快姿勢要慢,但是占用內(nèi)存要少

主要內(nèi)容來自:數(shù)組去重的正確編寫姿勢

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/84823.html

相關(guān)文章

  • JS數(shù)組去重總結(jié)

    摘要:數(shù)組去重,一般會在面試的時候才會碰到,要求手寫數(shù)組去重方法的代碼。在實際項目中碰到的數(shù)組去重,一般都是后臺去處理,很少讓前端處理數(shù)組去重。數(shù)組去重的方法一利用去重中最常用如果不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般會在面試的時候才會碰到,要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。 在實際項目中碰到的...

    whinc 評論0 收藏0
  • JS數(shù)組去重方法小結(jié)

    摘要:數(shù)組去重看了網(wǎng)上很多數(shù)組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結(jié)。還有就是方法返回的數(shù)組也是排序后的數(shù)組,某些情況下可能不符合要求。 JS數(shù)組去重 看了網(wǎng)上很多數(shù)組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結(jié)。部分內(nèi)容參考該博客 1 . 在原數(shù)組上操作(基本方法) 思路:利用循環(huán)嵌套,判斷數(shù)組中每個元素與其后面的元素是否相等,如果相等,就使用spli...

    PascalXie 評論0 收藏0
  • js基本操作-數(shù)組去重

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

    blastz 評論0 收藏0
  • js基本操作-數(shù)組去重

    摘要:基本操作數(shù)組去重數(shù)組去重的方法臨時數(shù)組保存其實這里面還沒考慮到數(shù)組里面嵌套數(shù)組對象的情況把去重后的結(jié)果放在一個臨時數(shù)組中對原來數(shù)組的元素與臨時數(shù)組元素比較臨時數(shù)組中不存在這個元素的放入臨時數(shù)組。 js基本操作-數(shù)組去重 數(shù)組去重的方法 1. 臨時數(shù)組保存(其實這里面還沒考慮到數(shù)組里面嵌套數(shù)組/對象的情況) 把去重后的結(jié)果放在一個臨時數(shù)組中, 對原來數(shù)組的元素與臨時數(shù)組元素比較, 臨時...

    GeekGhc 評論0 收藏0
  • js數(shù)組去重方法總結(jié)

    摘要:注方法可以返回某個指定字符串在字符串中首次出現(xiàn)的位置比如首次出現(xiàn)的位置是數(shù)組中的第一個,即下標為遍歷數(shù)組使用標識符去重聲明一個變量標識排序后遍歷過濾數(shù)組思路先給數(shù)組排序,這樣相同的項總是相鄰。 假設(shè)我們有數(shù)組arr,并且聲明新數(shù)組hash用來存放去重后的元素: var arr = [23,44,5,2,23,5,1,7,8,7]; //包含重復(fù)元素 var hash= [];...

    snowLu 評論0 收藏0

發(fā)表評論

0條評論

ymyang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<