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()方法中的参数即可,十分灵活。

"其实生活在井里也挺好的,就是偶尔,会觉得世界很空,生活很咸。"

原文地址:https://www.cnblogs.com/yanggb/p/11800788.html