天天看點

javascript中的slice()方法

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()方法中的參數即可,十分靈活。

"其實生活在井裡也挺好的,就是偶爾,會覺得世界很空,生活很鹹。"