Array.slice方法和splice方法在众多的JS数组中属于比较复杂的一个方法,而且容易记混。搜索网络上很多资料都没有发现系统的总结。特别归纳如下,不完全处还希望各位批评指正。
一、slice方法
格式:
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,返回空子数组。
二、splice方法
格式:
arrayObject.splice(index,howmany,item1,.....,itemX)
功能:splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 要删除的项目数量。如果设置为 0,则不会删除项目。 : Array 包含被删除项目的新数组,如果有的话。 : splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。 如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
具体情况详见下面的代码示例:
var arr=[1,2,3,4,5,6]; var arr2=arr.splice(2,4); console.log("arr2=",arr2,",arr=",arr); //arr2= [3, 4, 5, 6] ,arr= [1, 2]