0%

slice() 与splice()的区别

array.slice(start, end)方法是对array中的一段做浅复制,复制的元素从 start 开始,到 end 为止,但是不包括 end,函数返回这一段字数组。

1
var a = [1, 2, 3];

end省略时,表示提取start及其后面的所有成员。

1
var b = a.slice(1);//b = [2,3]

如果两个参数中的任何一个为负,该参数,假设为 -n 表示的是从数组尾开始倒数的第n个成员。

1
2
var c = a.slice(-3, -1);//c = [1, 2]
var d = a.slice(-3, 1 );//d = [1]

注:如果你选的成员的顺序有悖于数组(即从后往前取),则会返回一个新的空数组。

1
2
var e = a.slice(-1, -3);//e = []
var f = a.slice(-1, 3);//f = []

如果 start 大于array.length,则返回新的空数组。

1
var g = a.slice(4,n);//g = []

最重要的一点,slice()不会影响到原数组。

1
a;//[1, 2, 3]

array.splice(start, deleteCount, item1, item2, …)一般用于对数组进行插入和去除成员的操作。item1, item2…为可选参数。start是要去除的成员的起点,deleteCount是要去除的个数。如果有item,就从start的位置开始插入。它返回一个包含被去除的成员的数组,如果没有就返回空数组。

1
2
3
var a = ['a', 'b', 'c'];
var r = a.splice(0, 2, 'hi', 'hello');//r = ['a,' 'b']
a;//['hi', 'hello', 'c']

splice()会影响原数组

end省略时,表示提取start及其后面的所有成员。

1
2
var a = ['a', 'b', 'c'];
var r = splice(1);//r = ['b', 'c']

注:省略第二个参数将返回空数组,当然第二个参数为'',将带来语法错误。

参数中出现负数,以及start 大于array.length时,与slice()类似。