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

資訊專(zhuān)欄INFORMATION COLUMN

Lodash源碼講解-compact函數(shù)

glumes / 2017人閱讀

摘要:首先我們先說(shuō)一下這個(gè)函數(shù)的作用,這個(gè)函數(shù)接收一個(gè)數(shù)組作為參數(shù)然后將數(shù)組中所有通過(guò)布爾轉(zhuǎn)換可以變?yōu)榈闹等コ龔亩梢粋€(gè)新的數(shù)組。

原文首發(fā)于Lodash源碼講解

這是我們閱讀Lodash源碼的第3篇博客,在這篇文章里我們來(lái)學(xué)習(xí)一下Lodash的compact方法。

compact函數(shù)內(nèi)部沒(méi)有依賴(lài)別的函數(shù),讓我們先來(lái)看一下compact函數(shù)的源碼。

/**
 * Creates an array with all falsey values removed. The values `false`, `null`,
 * `0`, `""`, `undefined`, and `NaN` are falsey.
 *
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to compact.
 * @returns {Array} Returns the new array of filtered values.
 * @example
 *
 * compact([0, 1, false, 2, "", 3])
 * // => [1, 2, 3]
 */
function compact(array) {
  let resIndex = 0
  const result = []

  if (array == null) {
    return result
  }

  for (const value of array) {
    if (value) {
      result[resIndex++] = value
    }
  }
  return result
}

export default compact

首先我們先說(shuō)一下這個(gè)函數(shù)的作用,這個(gè)函數(shù)接收一個(gè)數(shù)組作為參數(shù);然后將數(shù)組中所有通過(guò)布爾轉(zhuǎn)換可以變?yōu)?b>false的值去除;從而生成一個(gè)新的數(shù)組。

那么那些值通過(guò)布爾轉(zhuǎn)換會(huì)變?yōu)?b>false呢;這些值有:0""falsenullundefinedNaN

因?yàn)檫@個(gè)函數(shù)比較簡(jiǎn)單,我們就不劃分步驟了,直接進(jìn)行講解;首先我們初始化了兩個(gè)變量,resIndex用來(lái)表示我們返回的數(shù)組的索引;result是我們新創(chuàng)建的一個(gè)數(shù)組,這個(gè)數(shù)組就是我們要返回的數(shù)組;接下來(lái),如果傳遞的數(shù)組為空,我們直接返回一個(gè)空的數(shù)組;接下來(lái)就是使用ES6新的語(yǔ)法,for...of對(duì)傳遞的數(shù)組進(jìn)行循環(huán),將能夠通過(guò)布爾轉(zhuǎn)化為false的值去除,然后就獲取到了我們想要的結(jié)果。

那么,接下來(lái)我們首先把這個(gè)源碼部分實(shí)現(xiàn)一遍;雖然簡(jiǎn)單,但是還是要自己敲一遍代碼的;切記不要眼高手低。compact是我自己又重新實(shí)現(xiàn)一遍的代碼。

接下來(lái)我們考慮一下,如果我們不使用for...of來(lái)循環(huán)數(shù)組,而是使用數(shù)組的map方法,或者是使用while進(jìn)行數(shù)組的循環(huán);它們的效率有多大的差異?讓我們來(lái)實(shí)踐一下,首先是使用map方法,我們使用如下的代碼來(lái)進(jìn)行測(cè)試:

// 使用數(shù)組原生的map方法
function compact(array) {
    // 判斷array是否為空
    if(array == null) {
        return [];
    }

    let result = [];

    array.map((value) => {
        if(value) {
            result.push(value);
        }
    });

    return result;
}

再接著我們使用while進(jìn)行數(shù)組的循環(huán),使用如下的代碼進(jìn)行測(cè)試:

// 使用while進(jìn)行數(shù)組的循環(huán)

function compact(array) {
    // 判斷array是否為空
    if(array == null) {
        return [];
    }

    let result = [];
    let index = 0;
    let resIndex = 0;
    let value;
    const length = array.length;

    while(index < length) {
        value = array[index];
        if(value) {
            result[resIndex++] = value;
        }
        index++;
    }

    return result;
}

我將這兩個(gè)方法都添加到之前的那個(gè)例子中了,大家可以點(diǎn)擊這里查看。

接下來(lái)我們就要進(jìn)行性能的測(cè)試了,我寫(xiě)了一個(gè)測(cè)試的用例;大家可以點(diǎn)擊這里查看。經(jīng)過(guò)多次測(cè)試發(fā)現(xiàn),使用lodash的compact方法和使用while進(jìn)行數(shù)組循環(huán)的compact方法的性能都還是不錯(cuò)的,使用map進(jìn)行數(shù)組循環(huán)的compact方法性能最差;但是使用map方法的compact方法代碼量是比較少的。

性能比較的圖如下圖所示:

lodash的compact方法性能比較好的一次測(cè)試:

使用while進(jìn)行數(shù)組循環(huán)的compact方法性能比較好的一次測(cè)試:

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

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

相關(guān)文章

  • lodash源碼分析之compact中的遍歷

    摘要:到這里,源碼分析完了。但是,有兩個(gè)致命的特性的遍歷不能保證順序會(huì)遍歷所有可枚舉屬性,包括繼承的屬性。的遍歷順序依賴(lài)于執(zhí)行環(huán)境,不同執(zhí)行環(huán)境的實(shí)現(xiàn)方式可能會(huì)不一樣。 小時(shí)候,鄉(xiāng)愁是一枚小小的郵票, 我在這頭, 母親在那頭。 長(zhǎng)大后,鄉(xiāng)愁是一張窄窄的船票, 我在這頭, 新娘在那頭。 后來(lái)啊, 鄉(xiāng)愁是一方矮矮的墳?zāi)梗?我在外頭, 母親在里頭。 而現(xiàn)在, 鄉(xiāng)愁是一灣淺淺的海峽, 我在這頭, 大...

    dmlllll 評(píng)論0 收藏0
  • Lodash學(xué)習(xí)筆記 - compact函數(shù)

    摘要:文檔地址中文文檔英文文檔源碼地址創(chuàng)建一個(gè)新數(shù)組,包含原數(shù)組中所有的非假值元素。例如和都是被認(rèn)為是假值。下面對(duì)比一下兩者效率,如下圖傳送門(mén)可以看到使用更快,如果沒(méi)有兼容性需求,還是使用原生函數(shù)比較好。 百忙之中(閑來(lái)無(wú)事)想抽點(diǎn)時(shí)間好好讀一下源碼,于是就選了Lodash來(lái)寫(xiě)一個(gè)系列罷。讀源碼順序就按照l(shuí)oadsh文檔順序來(lái)。 文檔地址:中文文檔?? 英文文檔源碼地址:gayhub ...

    habren 評(píng)論0 收藏0
  • Lodash源碼講解-chunk函數(shù)

    摘要:原文首發(fā)于源碼講解這是我們閱讀源碼的第篇博客,在這篇文章里我們來(lái)學(xué)習(xí)一下的方法。好啦,關(guān)于函數(shù)暫時(shí)就先講到這里啦。與惡龍纏斗過(guò)久自身亦成為惡龍凝視深淵過(guò)久深淵將回以凝視。 原文首發(fā)于Lodash源碼講解 這是我們閱讀Lodash源碼的第2篇博客,在這篇文章里我們來(lái)學(xué)習(xí)一下Lodash的chunk方法。 chunk函數(shù)內(nèi)部依賴(lài)其他的函數(shù),依賴(lài)的函數(shù)如下所示; slice 按照慣例,我們先...

    ISherry 評(píng)論0 收藏0
  • Lodash源碼講解-slice函數(shù)

    摘要:本文首發(fā)于技術(shù)風(fēng)暴源碼講解這是我們閱讀源碼的第篇博客,這一篇博客主要介紹的函數(shù),這個(gè)函數(shù)內(nèi)部的實(shí)現(xiàn)沒(méi)有依賴(lài)別的函數(shù)我們這篇博客就來(lái)講解一下這個(gè)函數(shù)。 本文首發(fā)于技術(shù)風(fēng)暴-Lodash源碼講解 這是我們閱讀源碼的第1篇博客,這一篇博客主要介紹Lodash的slice函數(shù),這個(gè)函數(shù)內(nèi)部的實(shí)現(xiàn)沒(méi)有依賴(lài)別的函數(shù);我們這篇博客就來(lái)講解一下這個(gè)slice函數(shù)。 我們首先來(lái)看一下這個(gè)函數(shù)的源碼,源碼...

    李義 評(píng)論0 收藏0
  • lodash數(shù)組篇之2 compact()

    摘要:創(chuàng)建一個(gè)新數(shù)組,包含原數(shù)組中所有的非假值元素。例如和都是被認(rèn)為是假值。 創(chuàng)建一個(gè)新數(shù)組,包含原數(shù)組中所有的非假值元素。例如false, null, 0, , undefined, 和 NaN 都是被認(rèn)為是假值。 以下是自己實(shí)現(xiàn)的compact() compact:(array)=>{ let result = [] //判斷參數(shù)是否是數(shù)組 如果不是...

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

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

0條評(píng)論

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