1. 程式人生 > >JS中數組方法的封裝之slice

JS中數組方法的封裝之slice

n) 功能 urn new ice this 三目運算符 fun 負數

slice方法的功能
// 1) : 數組的截取
// 2) :slice(m,n): 從數組索引m開始,截取到索引n,但是不包含n;[前包後不包]
// slice(m) : 從索引m開始,截取到末尾;
// slice():數組的克隆 slice(0);
// // 索引負數: 讓當前length+負數;
// 3) : 返回值是截取的數組
// 4) : 原有數組不發生改變;
/**
* 首先:先分清楚slice有幾種情況,slice的思想
* 傳的參數可以是其他類型的數據,只要能轉成有效數字就可以(所以參數的類型要求比較靈活)
* 其次,要註意的是只有第一個和第二個參數為有效參數,第三個及第三個以後的參數將對截取的結果不產生影響

對參數的處理:
* 我們暫且把第一個參數給變量start,第二個參數給變量end
* 1.當參數1、參數2同時為undefined或者其中一個為undefined的情況下
* 情況1:參數1為undefined時,直接取start=0
* 情況2:參數2為undefined時,直接取end=this.length

2.當參數1和參數2都不是undefined的情況下
* 情況1:當第一個參數為負數的情況下:start取this.length與參數中的最大值;當第一個參數大於等於0的情況下,start直接取自己
* 情況2:當第二個參數為負數的情況下,end取this.length與end的和;當參數大於0,end取this.length與end中的最小值

對區間長度的處理:設置size=end-start
* 情況1:當區間長度小於等於0的情況下,直接返回空數組
* 情況2:當區間長度大於0的情況下,不管對於字符串還是數組,創建一個長度為size的數組,依次從start到end,賦值給新的數組,將新數組返回

@type {Array}
*/
附上代碼:

    
Array.prototype.mySlice = function (start,end) {
        var newAry = [];//創建一個變量用來接收返回值
        var len = this.length;//變量接收當前數組的長度
        //先對參數為undefined的情況進行處理
start = (start !== undefined)?start:0; end = (end !== undefined)?end:len; //對於參數的處理,采用三目運算符,由於在與0判斷的時候自動轉換為數字再進行判斷,所以直接與0比較即可 start = (start>=0)?start:Math.max(0,len+start); end = (end>=0)?Math.min(end,len):len+end; var size = end - start;//用一個變量接收截取區間的長度 if(size>0){ //當區間長度大於0時,實例化一個長度為size的數組,並賦值給newAry newAry = new Array(size); //遍歷數組,將當前數組[start,end)區間上的值依次賦值給newAry for(var i = 0;i<size;i++){ newAry[i] = this[i+start]; } }else{ //當區間長度小於等於0的情況下,直接返回空數組 return newAry; } return newAry; };

JS中數組方法的封裝之slice