摘要:數(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) (03.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
摘要:引言上一節(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ò)介紹其定義、比較常見的...
摘要:對(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í)...
摘要:實(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)就...
摘要:目的相信在網(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...
摘要:基礎(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版本中即將刪除的部...
閱讀 976·2023-04-25 18:51
閱讀 1961·2021-09-09 11:39
閱讀 3341·2019-08-30 15:53
閱讀 2144·2019-08-30 13:03
閱讀 1357·2019-08-29 16:17
閱讀 638·2019-08-29 11:33
閱讀 1947·2019-08-26 14:00
閱讀 2174·2019-08-26 13:41