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