一、mySlice()
//mySplice 選取數(shù)組的的一部分,并返回一個新數(shù)組 Array.prototype.mySlice = function(start,end){ var arr = []; if(arguments.length == 0){ //如果不傳參數(shù),返回一個原數(shù)組副本 start = 0; end = this.length; }else{ //加工傳進來start參數(shù),使他符合循環(huán)要求 start = Number(start); if(Number.isNaN(start)){ start = 0; }else if(start < 0){ if(start < -(this.length)){ start = -this.length; } start = start + this.length; } } if(arguments.length == 2){ //加工傳進來end參數(shù),使他符合循環(huán)要求 end = Number(end); if(Number.isNaN(end)){ end = this.length; }else if(end < 0){ if(end < -(this.length)){ end = -this.length; } end = end + this.length; }else if(end > this.length){ end = this.length; } } if(end == undefined){ //如果沒傳end參數(shù),默認設(shè)為數(shù)組長度 end = this.length; } for(var i = Math.floor(start); i < Math.floor(end) ; i++){ arr.myPush(this[i]); } return arr; }二、mySplice()
//mySplice 從數(shù)組中添加或刪除元素 Array.prototype.mySplice = function(){ var index,howmany; if(arguments.length == 0){ this.length = 0; return this; }else if(arguments.length == 1){ //調(diào)整index和howmany的值 index = arguments[0]; if(index >= this.length){ index = this.length; }else if(index < -this.length){ index = 0; }else if(index < 0 && index >= -(this.length)){ index += this.length; } howmany = this.length - index; }else if(arguments.length >= 2){ //調(diào)整index和howmany的值 index = arguments[0]; if(index >= this.length){ index = this.length; }else if(index < -this.length){ index = 0; }else if(index < 0 && index >= -(this.length)){ index += this.length; } howmany = arguments[1]; if(index+howmany >= this.length){ howmany = this.length - index; } } var t1 = index; var length = arguments.length - 2; var arr = []; for(var i = 0 ; i < howmany ; i++){ // 返回刪除的數(shù)組 arr[i] = this[t1++]; } var t2 = index; for(var i = t2 + howmany ; i < this.length ; i++){ //刪除操作后的數(shù)組 this[t2++] = this[i]; } this.length = this.length - howmany; if(arguments.length > 2){ //插入數(shù) var lastLength = this.length; var leap = lastLength - index; var arIndexRigtht = arguments.length - 1; this.length = this.length + arguments.length - 2; for(var j = this.length - 1 ; j >= index ; j--){ if(leap > 0){ this[j] = this[j - arguments.length + 2]; leap = leap -1 ; }else{ this[j] = arguments[arIndexRigtht--]; } } } return arr; }
好吧,這兩個方法感覺都寫的很臃腫,日后能力提升了再修改吧。當(dāng)然如果能提好的建議那就再好不過了。 ^_^
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/94867.html
摘要:數(shù)組的原型上有一個方法叫做給不同的參數(shù)組合會返回不同的結(jié)果,由于組合非常多,這里研究一下不同組合的結(jié)果并基于原型鏈對該方法進行仿寫考慮情況為負數(shù),為負數(shù),超出有效長度了,非有效數(shù)字源碼如下不想看源碼的請直接看最下面的結(jié)果處理沒有參數(shù)的情況處 數(shù)組的原型上有一個方法叫做slice,給不同的參數(shù)組合會返回不同的結(jié)果,由于組合非常多,這里研究一下不同組合的結(jié)果并基于原型鏈對該方法進行仿寫考慮...
摘要:進階第一章作用域深入和面向?qū)ο箢A(yù)解釋全局作用域當(dāng)瀏覽器加載頁面的時候,提供了一個全局代碼執(zhí)行的環(huán)境預(yù)解釋變量提升在當(dāng)前的作用域中,代碼執(zhí)行之前,瀏覽器首先會默認的吧所有帶有和的進行提前聲明或定義理解聲明和定義聲明告訴瀏覽器在全局作用域中有 JS進階 第一章作用域深入和面向?qū)ο?預(yù)解釋 1、全局作用域:當(dāng)瀏覽器加載HTML頁面的時候,提供了一個全局js代碼執(zhí)行的環(huán)境 2、預(yù)解釋(變量提升...
摘要:前端基本功示例代碼一點這里前端基本功示例代碼二點這里一像素偽類實現(xiàn)對于老項目,有沒有什么辦法能兼容的尷尬問題了,個人認為偽類是比較完美的方法了。 前端基本功-示例代碼 (一) 點這里前端基本功-示例代碼 (二) 點這里 1.一像素 偽類 + transform 實現(xiàn)對于老項目,有沒有什么辦法能兼容1px的尷尬問題了,個人認為偽類+transform是比較完美的方法了。 原理是把原先元素...
摘要:前端基本功示例代碼一點這里前端基本功示例代碼二點這里一像素偽類實現(xiàn)對于老項目,有沒有什么辦法能兼容的尷尬問題了,個人認為偽類是比較完美的方法了。 前端基本功-示例代碼 (一) 點這里前端基本功-示例代碼 (二) 點這里 1.一像素 偽類 + transform 實現(xiàn)對于老項目,有沒有什么辦法能兼容1px的尷尬問題了,個人認為偽類+transform是比較完美的方法了。 原理是把原先元素...
摘要:一數(shù)組每個元素都執(zhí)行一次回調(diào)函數(shù)二檢測數(shù)值元素的每個元素是否都符合條件三檢測數(shù)組元素中是否有元素符合指定條件四檢測數(shù)值元素,并返回符合條件所有元素的數(shù)組五將數(shù)組元素計算為一個值從左到右以上回調(diào)函數(shù)只是手寫簡化版,無法傳參數(shù),若有誤或建議,請 一、myForEach //myForeach 數(shù)組每個元素都執(zhí)行一次回調(diào)函數(shù) Array.prototype.myForEach = fu...
閱讀 3459·2021-11-24 09:38
閱讀 1443·2021-11-22 15:08
閱讀 1543·2021-09-29 09:35
閱讀 552·2021-09-02 15:11
閱讀 1362·2019-08-30 12:55
閱讀 439·2019-08-29 17:16
閱讀 555·2019-08-29 11:30
閱讀 476·2019-08-26 13:23