Array.slice方法在众多的JS数组中属于比较复杂的一个方法,搜索网络上很多资料都没有发现系统的总结。特别归纳如下,不完全处还希望各位批评指正。
格式:
arrayObj.slice(start, [end])
功能:返回指定数组的一个子数组,并不修改原来数组。
参数:
start:必需。arrayObj的指定部分的开头。
end:可选。arrayObj的指定部分的结尾。
数组使用来看,这个方法类似于串操作中的substr函数。但是,当参数为负数时,情况就复杂了。
具体情况详见下面的代码示例:
var a1=[1,3,5,7,9];
var n1=a1.slice(0); //n1=>[1,3,5,7,9]效果与a1.slice(0,5)一样
var n1=a1.slice(1); //n1=>[3,5,7,9]
var m1=a1.slice(0,2); //m1=>[3,5],2代表截取子串的长度
var m1=a1.slice(0,5); //m1=>[1,3,5,7,9],5代表截取子串的长度
var m1=a1.slice(0,15); //m1=>[1,3,5,7,9],15大于最大长度,不再起作用
var m1=a1.slice(0,-1); // m1=>[1,3,5,7]
var m1=a1.slice(0,-2); // m1=>[1,3,5]
var m1=a1.slice(0,-5); // m1=>[]
var m1=a1.slice(0,-15); // m1=>[]
var n2=a1.slice(-1); //n2=>[9]
var n3=a1.slice(-2); //n3=>[7,9]
var nx=a1.slice(-5); // nx=>[1,3,5,7,9]
var ny=a1.slice(-10); // ny=>[1,3,5,7,9]
[1,2,3,4,5,6,7,8,9].slice(-5); //=>[5,6,7,8,9]
[1,2,3,4,5,6,7,8,9].slice(-5,-1); //=>[5,6,7,8]
[1,2,3,4,5,6,7,8,9].slice(-5,-3); //=>[5,6]
[1,2,3,4,5,6,7,8,9].slice(-5,-10); //=>[]
[1,2,3,4,5,6,7,8,9].slice(-5,0); //=>[]
[1,2,3,4,5,6,7,8,9].slice(-5,1); //=>[]
上述代码片断已经概括了slice方法的所有使用情形,总结如下:
(1)如果start>=0:
① 当没有参数end时,从原数组中返回从索引号start开始直到最后元素的子数组。
② 当参数end>=0时,从原数组中返回从索引号start开始的end个元素的子数组。此时,如果end>数组最大长度,则返回length个元素组成的子数组。
(2)如果start<0:
① 当没有参数end时,从原数组尾部截取|start|个元素组成的子数组。此时,如果|start|>数组最大长度,则返回length个元素组成的子数组。
② 当参数end<0,则从没有参数end时取得的子串,例如sub1,尾部截去|end|个元素。此时,当|end|>sub1.length,返回空子数组。
③ 当参数end>=0,返回空子数组。
本文出自 “青峰” 博客,请务必保留此出处http://zhuxianzhong.blog.51cto.com/157061/1651258
原文地址:http://zhuxianzhong.blog.51cto.com/157061/1651258