splice和slice有什么区别?
const array = [1, 2, 3, 4, 5];
array.splice(index, 1);
array.slice(index, 1);
splice和slice有什么区别?
const array = [1, 2, 3, 4, 5];
array.splice(index, 1);
array.slice(index, 1);
splice()
会改变原始数组,而 slice()
不会,但两者都会返回数组对象。
请参见下面的示例:
var array=[1,2,3,4,5];
console.log(array.splice(2));
这将返回 [3,4,5]
。原始数组会受到影响,导致 array
变成了 [1,2]
。
var array=[1,2,3,4,5]
console.log(array.slice(2));
这将返回[3,4,5]
。 原始数组不受影响,导致array
为[1,2,3,4,5]
。
下面是一个简单的示例,证实了这一点:
//splice
var array=[1,2,3,4,5];
console.log(array.splice(2));
//slice
var array2=[1,2,3,4,5]
console.log(array2.slice(2));
console.log("----after-----");
console.log(array);
console.log(array2);
arr1 = arr0.slice()
。 - Mg Gmsplice
就像政府向你征收税收一样,而slice
更像是一个复制粘贴的人。 - radbyx.splice()
非常不直观,我花了很长时间才弄清为什么对原始数组的引用会返回 undefined
,直到我找到了这个帖子。 - NixinovaSplice和Slice都是JavaScript数组函数。
Splice与Slice的区别
splice()方法返回一个数组中被移除的元素,而slice()方法则返回选定的元素作为一个新的数组对象。
splice()方法改变原始数组,slice()方法不改变原始数组。
splice()方法可以接受n个参数,而slice()方法只接受两个参数。
使用示例:splice()
参数1: 索引, 必填项。指定要添加/删除项的位置的整数值。使用负值可从数组末尾指定位置。
参数2: 可选项。要删除的项目数量。如果设置为0(零),则不会删除任何项目。如果未传递,则将删除提供的索引之后的所有项目。
参数3…n: 可选项。要添加到数组中的新项。
var array=[1,2,3,4,5];
console.log(array.splice(2));
// shows [3, 4, 5], returned removed item(s) as a new array object.
console.log(array);
// shows [1, 2], original array altered.
var array2=[6,7,8,9,0];
console.log(array2.splice(2,1));
// shows [8]
console.log(array2.splice(2,0));
//shows [] , as no item(s) removed.
console.log(array2);
// shows [6,7,9,0]
切片示例
参数 1:必需。一个整数,指定选择的起始位置(第一个元素的索引为 0)。使用负数从数组末尾开始选择。
参数 2:可选。一个整数,指定选择的结束位置但不包括在内。如果省略,则将选择从起始位置到数组末尾的所有元素。使用负数从数组末尾开始选择。
var array=[1,2,3,4,5]
console.log(array.slice(2));
// shows [3, 4, 5], returned selected element(s).
console.log(array.slice(-2));
// shows [4, 5], returned selected element(s).
console.log(array);
// shows [1, 2, 3, 4, 5], original array remains intact.
var array2=[6,7,8,9,0];
console.log(array2.slice(2,4));
// shows [8, 9]
console.log(array2.slice(-2,4));
// shows [9]
console.log(array2.slice(-3,-1));
// shows [8, 9]
console.log(array2);
// shows [6, 7, 8, 9, 0]
splice(x,y)
不同的是,在 slice(x,y)
中,第二个参数 y
不是从位置 x 开始计算,而是从数组的第一个元素开始计算。 - Ramesh Pareekarray.slice((index, count))
而不是array.slice(index, count)
,你将得到在“切片”后剩余的部分。试试看! - Ramesh PareekS LICE = 返回数组的一部分,但不会将原始数组分割。
SP LICE = 返回数组的一部分,并将原始数组拆分。
个人认为这样更容易记住,因为在Web开发初学者时,这两个术语经常令人困惑。
这里有一个简单的技巧可以记住slice
和splice
之间的区别
slice
and splice
.var a=['j','u','r','g','e','n'];
// array.slice(startIndex, endIndex)
a.slice(2,3);
// => ["r"]
//array.splice(startIndex, deleteCount)
a.splice(2,3);
// => ["r","g","e"]
记忆技巧:
把"spl"(splice 的前三个字母)
理解为“指定长度”,即第二个参数应该是一个长度而不是索引。
splice
,第二个参数是返回数组中元素的数量,但对于 slice
,第二个参数是要返回的最后一个元素的索引 +1。slice(index,1)
不一定返回从 index
开始的一个元素的数组。 [1,2,3,4,5].slice(0,1)
返回 [1]
,但 [1,2,3,4,5].slice(3,1)
返回 []
,因为 1
被解释为 final index +1
,所以 final index = 0
,但这是在 start index = 3
之前,所以返回空数组。 - BaltoStar语法
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
参数
start
:必选项。起始索引。start
为负数,则按照规范视作 "Math.max((array.length + start), 0)"
(下方提供示例),从 array
的末尾开始计算。deleteCount
:可选项。要删除的元素数量(如果未提供则默认删除从 start
开始的所有元素)。item1, item2, ...
:可选项。要从 start
索引处添加到数组中的元素。返回值:一个包含已删除元素的数组(如果没有删除任何元素则返回空数组)
原始数组被改变:是
const array = [1,2,3,4,5];
// Remove first element
console.log('Elements deleted:', array.splice(0, 1), 'mutated array:', array);
// Elements deleted: [ 1 ] mutated array: [ 2, 3, 4, 5 ]
// array = [ 2, 3, 4, 5]
// Remove last element (start -> array.length+start = 3)
console.log('Elements deleted:', array.splice(-1, 1), 'mutated array:', array);
// Elements deleted: [ 5 ] mutated array: [ 2, 3, 4 ]
更多示例请查看MDN Splice examples
语法
array.slice([begin[, end]])
参数
begin
:可选。初始索引(默认值为 0)。begin
为负数,则根据规范将其视为"Math.max((array.length + begin), 0)"
,从array
的末尾有效地提取(下面提供了示例)。end
:可选。提取但不包括的最后一个索引(默认值为 array.length)。如果end
为负数,则按照规范将其视为"Math.max((array.length + begin),0)"
,从array
的末尾有效地提取(下面提供了示例)。返回值:包含提取元素的数组。
原始数组是否被修改:否
const array = [1,2,3,4,5];
// Extract first element
console.log('Elements extracted:', array.slice(0, 1), 'array:', array);
// Elements extracted: [ 1 ] array: [ 1, 2, 3, 4, 5 ]
// Extract last element (start -> array.length+start = 4)
console.log('Elements extracted:', array.slice(-1), 'array:', array);
// Elements extracted: [ 5 ] array: [ 1, 2, 3, 4, 5 ]
更多示例请参考MDN Slice 示例
不要将此视为绝对真理,因为根据每种场景,一个可能比另一个表现更好。
性能测试
splice()
方法返回从数组中移除的元素列表。
slice()
方法以一个新的数组对象的形式返回所选的元素(或元素子集),并不改变原始数组。
splice()
方法可以接受n个参数:
参数1:索引,必需。
参数2:可选。要移除的元素数量。如果设置为0(零),则不删除任何元素。如果未传递,则将从所提供的索引开始删除所有项目。
参数3..n:可选。要添加到数组中的新项目。
slice()
方法可以接受2个参数:
参数1:必需。一个整数,指定从哪里开始选择(第一个元素的索引为0)。使用负数从数组末尾进行选择。
参数2:可选。一个整数,指定选择的结束位置。如果省略,则将选择从起始位置到数组的末尾的所有元素。使用负数从数组末尾进行选择。
Splice和Slice是内置的Javascript命令,不是特定于AngularJS的命令。Slice返回从“start”到“end”指定器之前的数组元素。Splice改变了实际的数组,并从“start”开始保留指定数量的元素。Google上有很多信息,只需要搜索即可。
两者返回相同的答案,但:
[0,1,2,3].splice(1,1)
修改了数组,从索引1
(第一个参数)开始删除1
个项目(第二个参数),并返回已删除的元素(在本例中为[1]
),而[0,1,2,3].slice(1,1)
则复制了该数组,从索引1
(第一个参数)开始,并在索引1
(第二个参数)处停止,然后返回该数组,这在本例中是一个空数组[]
。因此,它们并不都返回相同的内容。 - mockingjaysplice
是一种变异方法,所以它的返回值显然不同于slice
。 - AmerllicA