为什么当数组只有一个元素时,array.splice()方法无法工作?

13

这是预期的行为吗?我希望在这里返回一个空数组。

JavaScript

let arr = [1];
console.log(arr.splice(0, 1))

控制台

1

5
它返回了“1”,这是一个正确的结果。 - kind user
1
但是如果我从索引0开始,并删除1个项目,为什么它不会返回一个空数组呢? - Jim Moody
3
因为splice()方法返回从原始数组中被“剪切/删除”的值。尝试使用console.log(arr),你会发现它是空的。 - kind user
4个回答

20
由于它返回被删除的内容,而在这种情况下是[1]。调用后,arr将为空。

例如:

let arr = [1];
arr.splice(0, 1);
console.log(arr);


哦,我以为它返回修改后的数组。 - Jim Moody

3

Array.prototype.splice() 返回已删除元素的数组。

您记录的是操作返回的值,而不是数组的当前状态。


2

splice() 方法通过删除现有元素和/或添加新元素来更改数组的内容。

参考文献

该方法的语法如下:

array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)

您正在使用第二种语法,并将0作为起始位置,将1作为deleteCount。这意味着您希望从第0个索引开始删除1个元素(而不是在数组中的1个值)。
该方法返回一个包含已删除元素的数组。如果只删除了一个元素,则返回一个包含一个元素的数组。如果没有删除任何元素,则返回一个空数组。
因此,在这种情况下,结果是[1],即一个具有值1的数组,这是您刚刚删除的项目。

0

在尝试实现小程序中的某个函数时,我遇到了这个问题。解决方法是在使用函数splice之前先检查数组的长度。例如:

if(imgList.length > 1){
    imgList.splice(index, 1);
else{
    imgList = []
}

你可以尝试这样解决它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接