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

資訊專欄INFORMATION COLUMN

slice方法重寫及常見應(yīng)用

vvpvvp / 3300人閱讀

摘要:數(shù)組的原型上有一個(gè)方法叫做給不同的參數(shù)組合會(huì)返回不同的結(jié)果,由于組合非常多,這里研究一下不同組合的結(jié)果并基于原型鏈對(duì)該方法進(jìn)行仿寫考慮情況為負(fù)數(shù),為負(fù)數(shù),超出有效長(zhǎng)度了,非有效數(shù)字源碼如下不想看源碼的請(qǐng)直接看最下面的結(jié)果處理沒有參數(shù)的情況處

數(shù)組的原型上有一個(gè)方法叫做slice,給不同的參數(shù)組合會(huì)返回不同的結(jié)果,由于組合非常多,這里研究一下不同組合的結(jié)果并基于原型鏈對(duì)該方法進(jìn)行仿寫
考慮情況:

slice(a,b) slice(a) slice(undefined,b) slice()
a=b,a為負(fù)數(shù)(0),b為負(fù)數(shù)(0),b超出有效長(zhǎng)度了,a,b非有效數(shù)字

源碼如下: 不想看源碼的請(qǐng)直接看最下面的結(jié)果...

Array.prototype.mySlice = function (a, b) {
        var newArr = [];
        //處理沒有參數(shù)的情況
        if (a === undefined && b === undefined) {
            return this
        }
        //處理只有一個(gè)參數(shù),或者是第二個(gè)參數(shù)大于數(shù)組長(zhǎng)度的情況
        if (b === undefined || b > this.length) {
            b = this.length
        }
        if (a === undefined) {
            a = 0
        }
        //處理參數(shù)不是數(shù)字的情況(上面代碼已經(jīng)將undefined參數(shù)轉(zhuǎn)化為非undefined參數(shù)并且保證參數(shù)為兩個(gè)了)
        if (typeof a !== "number"  || typeof b !== "number" ) {
            console.log("參數(shù)必須是數(shù)字")
        }
        //處理第一個(gè)參數(shù)為負(fù)數(shù)以及第一個(gè)參數(shù)大與第二個(gè)參數(shù)以及第二個(gè)參數(shù)是負(fù)數(shù)的情況的情況

        if (b < 0) {
            b = this.length + b
        }
        if (a < 0) {
            a = this.length + a
        }
        //先將a,b恢復(fù)成正數(shù)再比較
        if (a >= b || b === 0) {
            return []
        }
        //正常 slice(a,b)
        for (var i = a; i < b; i++) {
            newArr.push(this[i])
        }
        return newArr
    }

考慮到驗(yàn)證正確性,增加一個(gè)驗(yàn)證函數(shù)

function check(testArr, n, m) {
        console.log(`[${testArr}].slice(${n},${m})--->[${testArr.slice(n, m)}]`, testArr.slice(n, m).toString() === testArr.mySlice(n, m).toString());
    }
     
    check([1, 2, 3, 4, 5], 1, 3);
    check([1, 2, 3, 4, 5], 1);
    check([1, 2, 3, 4, 5], undefined, 3);
    check([1, 2, 3, 4, 5], 1, 7);
    check([1, 2, 3, 4, 5]);
    check([1, 2, 3, 4, 5], -1, 3);
    check([1, 2, 3, 4, 5], -3, 3);
    check([1, 2, 3, 4, 5], 1, 0);
    check([1, 2, 3, 4, 5], 1, -1);
    check([1, 2, 3, 4, 5], 1, -2);
    check([1, 2, 3, 4, 5], 1, -3);
    check([1, 2, 3, 4, 5], 3, 1);

結(jié)果如下:

比較常見的應(yīng)用:

數(shù)組的復(fù)制

   arr.slice()

類數(shù)組轉(zhuǎn)化為數(shù)組(dom類數(shù)組不兼容IE6,7,可以用ES6中arr.from()替換)

Array.prototype.slice(類數(shù)組)

子數(shù)組的獲取
3.1 正常的自數(shù)組獲取

   arr.slice(m,n) (0

3.2 模擬多次pop() shift()

   比如n次pop   arr = arr.slice(undefined,-n)
   比如n次shift   arr = arr.slice(n)

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

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

相關(guān)文章

  • 【進(jìn)階 6-2 期】深入高階函數(shù)應(yīng)用之柯里化

    摘要:引言上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說(shuō)明了使用高階函數(shù)和不使用高階函數(shù)的情況。我們期望函數(shù)輸出,但是實(shí)際上調(diào)用柯里化函數(shù)時(shí),所以調(diào)用時(shí)就已經(jīng)執(zhí)行并輸出了,而不是理想中的返回閉包函數(shù),所以后續(xù)調(diào)用將會(huì)報(bào)錯(cuò)。引言 上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說(shuō)明了使用高階函數(shù)和不使用高階函數(shù)的情況。后面幾部分將結(jié)合實(shí)際應(yīng)用場(chǎng)景介紹高階函數(shù)的應(yīng)用,本節(jié)先來(lái)聊聊函數(shù)柯里化,通過(guò)介紹其定義、比較常見的...

    stackvoid 評(píng)論0 收藏0
  • 《JavaScript 闖關(guān)記》之基本包裝類型

    摘要:對(duì)基本包裝類型的實(shí)例調(diào)用會(huì)返回,而且所有基本包裝類型的對(duì)象都會(huì)被轉(zhuǎn)換為布爾值。構(gòu)造函數(shù)也會(huì)像工廠方法一樣,根據(jù)傳入值的類型返回相應(yīng)基本包裝類型的實(shí)例。要注意的是,使用調(diào)用基本包裝類型的構(gòu)造函數(shù),與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的。 為了便于操作基本類型值,JavaScript 還提供了3個(gè)特殊的引用類型:Boolean、Number 和 String。實(shí)際上,每當(dāng)讀取一個(gè)基本類型值的時(shí)...

    xiaolinbang 評(píng)論0 收藏0
  • javascript 基本包裝類型總結(jié)

    摘要:實(shí)際上,每當(dāng)讀取一個(gè)基本類型值時(shí),后臺(tái)就會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)的基本包裝類型的對(duì)象。參數(shù)表示數(shù)值的所有數(shù)字的位數(shù)不包括指數(shù)部分。原因與顯示創(chuàng)建對(duì)象一樣類型重寫了,都返回對(duì)象表示的基本字符串值。轉(zhuǎn)換為針對(duì)地區(qū)的小寫方式。 讀《javasrcipt 高級(jí)程序設(shè)計(jì)》筆記。ECMAScript提供了3種特殊的引用類型:Boolean,Number,String。實(shí)際上,每當(dāng)讀取一個(gè)基本類型值時(shí),后臺(tái)就...

    explorer_ddf 評(píng)論0 收藏0
  • JavaScript:侃侃Array的應(yīng)用場(chǎng)景

    摘要:目的相信在網(wǎng)上都有很多的的介紹,這里就應(yīng)用場(chǎng)景舉例說(shuō)明前提了解和一句話概括用別人的方法,完成自己的功能??偨Y(jié)介紹了和的用法正文部分根據(jù)需求列舉的應(yīng)用場(chǎng)景注意事項(xiàng)優(yōu)化方案 目的 相信在網(wǎng)上都有很多的Array的api介紹 , 這里就應(yīng)用場(chǎng)景舉例說(shuō)明 前提 了解apply和call 一句話概括:用別人的方法,完成自己的功能。 function Student(na...

    tommego 評(píng)論0 收藏0
  • Vue.js 實(shí)踐(2):實(shí)現(xiàn)多條件篩選、搜索、排序分頁(yè)的表格功能

    摘要:基礎(chǔ)布局的中主要為部分,分別是用于搜索篩選和分頁(yè)的表單控件用于排序表格的表頭以及用于展示數(shù)據(jù)的。這也是前瞻發(fā)布之后,提出廢棄部分功能后許多人反應(yīng)較為強(qiáng)烈的原因。 與上周的第一篇實(shí)踐教程一樣,在這篇文章中,我將繼續(xù)從一種常見的功能——表格入手,展示Vue.js中的一些優(yōu)雅特性。同時(shí)也將對(duì)filter功能與computed屬性進(jìn)行對(duì)比,說(shuō)明各自的適用場(chǎng)景,也為vue2.0版本中即將刪除的部...

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

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

0條評(píng)論

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