slice方法的功能
// 1) : 數組的截取
// 2) :slice(m,n): 從數組索引m開始,截取到索引n,可是不包含n;[前包後不包]
// slice(m) : 從索引m開始,截取到末尾;
// slice():數組的克隆 slice(0);
// // 索引負數: 讓當前length+負數;
// 3) : 返回值是截取的數組
// 4) : 原有數組不發生改變;
/**
* 首先:先分清楚slice有幾種狀況,slice的思想
* 傳的參數能夠是其餘類型的數據,只要能轉成有效數字就能夠(因此參數的類型要求比較靈活)
* 其次,要注意的是隻有第一個和第二個參數爲有效參數,第三個及第三個之後的參數將對截取的結果不產生影響
對參數的處理:
* 咱們暫且把第一個參數給變量start,第二個參數給變量end
* 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}
*/
附上代碼:javascript
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; };