欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中Array實(shí)例方法filter的實(shí)現(xiàn)原理

 更新時(shí)間:2024年03月24日 10:10:21   作者:Aimilali  
filter() 方法創(chuàng)建一個(gè)新數(shù)組,其中包含通過(guò)所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素,本文將給大家介紹JavaScript中Array實(shí)例方法filter的實(shí)現(xiàn)原理,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下

Array.prototype.filter()

filter() 方法創(chuàng)建一個(gè)新數(shù)組,其中包含通過(guò)所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素。 換句話說(shuō),它會(huì)篩選出原始數(shù)組中滿足條件的元素,并將其組成一個(gè)新的數(shù)組返回。 filter() 不會(huì)改變?cè)瓟?shù)組,但是傳入的回調(diào)函數(shù)可以改變?cè)瓟?shù)組。

語(yǔ)法

filter(callbackFn) 
filter(callbackFn, thisArg)

參數(shù)

1、callbackFn:為數(shù)組中的每個(gè)元素執(zhí)行的函數(shù)。返回的真值會(huì)將元素追加到新數(shù)組中(是追加不是添加),否則返回一個(gè)假值。

該函數(shù)被調(diào)用時(shí)將傳入以下參數(shù):

  • element:數(shù)組中當(dāng)前正在處理的元素。
  • index:正在處理的元素在數(shù)組中的索引。
  • array:調(diào)用了 filter() 的數(shù)組本身。

2、thisArg(可選):執(zhí)行 callbackFn 時(shí)用作 this 的值。

返回值

返回給定數(shù)組的一部分的淺拷貝,其中只包括通過(guò)提供的函數(shù)實(shí)現(xiàn)的測(cè)試的元素。 如果沒有元素通過(guò)測(cè)試,則返回一個(gè)空數(shù)組。

用法

第一種(推薦)

const array = [1, 2, 3]
const newArray = array.filter((element, index, array) => {
    // 返回真假值判斷
    return Object.is(element, 2)
})
// [2]

第二種(基于 this 進(jìn)行操作時(shí))

const thisArg = { value: 1 }
const array = [1, 2, 3]
const newArray = array.filter(function (element, index, array) {
    // 返回真假值判斷
    return Object.is(element, this.value)
}, thisArg)
// [1]

描述

filter() 方法是一個(gè)迭代方法。它為數(shù)組中的每個(gè)元素調(diào)用提供的 callbackFn 函數(shù)一次,并構(gòu)造一個(gè)由所有返回真值的元素值組成的新數(shù)組。

callbackFn 僅在已分配值的數(shù)組索引處被調(diào)用。它不會(huì)在稀疏數(shù)組中的空槽處被調(diào)用。

請(qǐng)注意,在第一次調(diào)用 callbackFn之前,數(shù)組的長(zhǎng)度已經(jīng)被保存。因此:

  • 當(dāng)開始調(diào)用 filter() 時(shí),callbackFn 將不會(huì)訪問(wèn)超出數(shù)組初始長(zhǎng)度的任何元素。
  • 對(duì)已訪問(wèn)索引的更改不會(huì)導(dǎo)致再次在這些元素上調(diào)用 callbackFn。
  • 如果數(shù)組中一個(gè)現(xiàn)有的、尚未訪問(wèn)的元素被 callbackFn 更改,則它傳遞給 callbackFn 的值將是該元素被修改后的值。被刪除的元素則不會(huì)被訪問(wèn)。

上述類型的并發(fā)修改經(jīng)常導(dǎo)致難以理解的代碼,通常應(yīng)避免(特殊情況除外)。

filter() 方法是通用的。它只期望 this 值具有 length 屬性和整數(shù)鍵屬性。

實(shí)現(xiàn) filter 方法

從上面 filter 描述總結(jié)實(shí)現(xiàn) filter 時(shí)注意實(shí)現(xiàn)這三點(diǎn)。

  • 回調(diào)函數(shù)調(diào)用之前,數(shù)組的長(zhǎng)度已經(jīng)被保存。
  • 回調(diào)函數(shù)不會(huì)在稀疏數(shù)組中的空槽處被調(diào)用。
  • 返回值是所有真值的元素值組成的新數(shù)組。
Array.prototype.myFilter = function (fun, context) {
    if (!Object.is(typeof fun, 'function')) {
        throw TypeError(`${typeof fun} is not a function`)
    }
    const length = this.length // 數(shù)組的長(zhǎng)度已經(jīng)被保存
    const newArr = []
    for (let i = 0; i < length; i++) {
        if (Object.hasOwn(this, i)) {  // 跳過(guò)稀疏數(shù)組
            const result = fun.call(context, this[i], i, this)
            if (result) {
                newArr.push(this[i]) // 追加符合過(guò)濾條件的元素
            }
        }
    }
    return newArr
}

結(jié)語(yǔ)

到此這篇關(guān)于JavaScript中Array實(shí)例方法filter的實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)JavaScript Array filter實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)自定義拍攝組件

    微信小程序?qū)崿F(xiàn)自定義拍攝組件

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)自定義拍攝組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • fetch 如何實(shí)現(xiàn)請(qǐng)求數(shù)據(jù)

    fetch 如何實(shí)現(xiàn)請(qǐng)求數(shù)據(jù)

    這篇文章主要介紹了fetch 如何實(shí)現(xiàn)請(qǐng)求數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • JS實(shí)現(xiàn)的簡(jiǎn)潔二級(jí)導(dǎo)航菜單雛形效果

    JS實(shí)現(xiàn)的簡(jiǎn)潔二級(jí)導(dǎo)航菜單雛形效果

    這篇文章主要介紹了JS實(shí)現(xiàn)的簡(jiǎn)潔二級(jí)導(dǎo)航菜單雛形效果,通過(guò)簡(jiǎn)單的JavaScript響應(yīng)鼠標(biāo)事件遍歷頁(yè)面元素實(shí)現(xiàn)二級(jí)導(dǎo)航菜單切換的效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-10-10
  • javascript之函數(shù)進(jìn)階詳解

    javascript之函數(shù)進(jìn)階詳解

    這篇文章主要為大家介紹了javascript函數(shù)進(jìn)階,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助<BR>
    2021-12-12
  • JavaScript 判斷指定字符串是否為有效數(shù)字

    JavaScript 判斷指定字符串是否為有效數(shù)字

    最近在做一個(gè)ColdFusion的項(xiàng)目,有一個(gè)業(yè)務(wù)Check,需要用JavaScript實(shí)現(xiàn):判斷指定字符串是否為有效數(shù)字。
    2010-05-05
  • js實(shí)現(xiàn)頁(yè)面圖片消除效果

    js實(shí)現(xiàn)頁(yè)面圖片消除效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)頁(yè)面圖片消除效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • JS實(shí)現(xiàn)利用兩個(gè)隊(duì)列表示一個(gè)棧的方法

    JS實(shí)現(xiàn)利用兩個(gè)隊(duì)列表示一個(gè)棧的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)利用兩個(gè)隊(duì)列表示一個(gè)棧的方法,簡(jiǎn)單分析了使用兩個(gè)隊(duì)列表示一個(gè)棧的原理,并結(jié)合具體實(shí)例分析了javascript相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • JS typeof fn === ''function'' && fn()詳解

    JS typeof fn === ''function'' && fn()詳解

    最近在學(xué)習(xí)js的時(shí)候發(fā)現(xiàn)很多人都喜歡在JS 中存在fn && fn() 執(zhí)行語(yǔ)句或者typeof fn === 'function' && fn(),下面這篇文章就為大家分享一下
    2020-08-08
  • BootStrap tooltip提示框使用小結(jié)

    BootStrap tooltip提示框使用小結(jié)

    這篇文章主要為大家詳細(xì)介紹了BootStrap tooltip提示框使用小結(jié) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 詳解js靜態(tài)檢查工具eslint配置文件

    詳解js靜態(tài)檢查工具eslint配置文件

    這篇文章主要介紹了js靜態(tài)檢查工具eslint配置文件的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-11-11

最新評(píng)論