JavaScript中的Array對象提供了一個slice()方法,用于從已有的數組中傳回標明的元素。
arrayObject.slice(start, end)
參數說明
start | 必需(否則沒有意義)。規定從何處開始選取,即提取起始處的索引(從0開始),從該索引開始提取原數組元素。如果是負數,那麼它規定從數組尾部開始算起的位置。也就是說,-1指最後一個元素,-2指倒數第二個元素,以此類推。如果沒有指定該參數,則從索引0開始。如果該參數大于原數組的長度,則會傳回空數組。 |
end | 可選。規定從何處結束選取,該參數是數組片斷結束處的數組下标,即提取終止處的索引(從0開始),在該索引處結束提取原數組元素,該方法會提取原數組中索引從start到end的所有元素(包含start,但不包含end)。如果這個參數是負數,那麼它規定的是從數組尾部開始算起的元素。如果沒有指定該參數,那麼切分的數組包含從start到數組結束的所有元素。如果該參數大于數組的長度,也會一直提取到原數組末尾。 |
傳回值
傳回一個新的數組,包含從start到end(不包括該元素)的arrayObject中的元素。
注意事項
這個方法并不會修改原來的數組,而是傳回一個淺複制了原數組中的元素的一個新數組。淺複制的意思就是說,如果向兩個數組任一中使用Array.push()添加了新元素或使用Array.splice()方法移除了元素,另一個是不會受到影響的;但是如果修改了數組中的元素,則情況會因為數組中的元素類型不同而有所不同。
1.如果該元素是個對象引用 (不是實際的對象),slice()方法會拷貝這個對象的引用到新的數組裡。也就是說,兩個數組中的這兩個元素都引用了同一個對象,如果被引用的對象發生改變,則新的和原來的數組中的這個元素也會同步發生改變。
2.對于字元串、數字及布爾值來說(不是String、Number或者Boolean對象),slice()方法會拷貝這些值到新的數組裡。在别的數組裡修改這些字元串或數字或是布爾值,将不會影響另一個數組。
簡單示例1
var arr = ["yanggb1", "yanggb2", "yanggb3"];
var arr1 = arr.slice(1, 2); // ["yanggb2"]
簡單示例2
var arr = ["yanggb1", "yanggb2", "yanggb3"];
var arr1 = arr.slice(1); // ["yanggb2", "yanggb3"]
巧妙用處
這個方法在截斷需要的格式化日期的場景中十分好用,我們來感受一下。
var today = '2019-05-20';
// 我想要yyyy-MM-dd的形式
var today1 = today.split('-').slice(0).join('-'); // 2019-05-20
// 我想要MM-dd的形式
var today1 = today.split('-').slice(1).join('-'); // 05-20
// 我想要dd的形式
var today2 = today.split('-').slice(2).join('-'); // 20
如果要切換不同的日期形式,隻需要修改slice()方法中的參數即可,十分靈活。
"其實生活在井裡也挺好的,就是偶爾,會覺得世界很空,生活很鹹。"