从数组中拼接出意外的元素

Unexpected elements being spliced out of an array?

本文关键字:意外 元素 拼接 数组      更新时间:2023-09-26

我有一些javascript(这里是JSFiddle)

var array = new Array();
array.push('a');
array.push('b');
var index = array.indexOf('b');
array = array.splice(index, 1); // splice out the element
alert(array[0]); // Which one is left?

我希望警报框将返回"a",因为"b"正在被删除,但对话框显示的是"b"。

类似地,如果我试图删除"a"

var array = new Array();
array.push('a');
array.push('b');
var index = array.indexOf('a');
array = array.splice(index, 1); // splice out the element
alert(array[0]);

然后返回"a"。

为什么(我认为)不正确的值被从数组中拼接出来?

如果有帮助的话,我会用铬。

来自Array.prototype.splice():上的MDN文档

返回

包含已删除元素的数组。如果只移除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组。

splice()不是一个"移除"函数。splice()方法更改数组的内容,在删除旧元素的同时添加新元素
这意味着实际的数组本身发生了更改。

要从数组中删除一个项目,应该使用Array.prototype.filter():

var array = ['a', 'b', 'stringToRemove', 'c'];
var filtered = array.filter(function(element){
    return element !== 'stringToRemove';
});
alert(JSON.stringify(filtered))

而不是

array = array.splice(index, 1); // splice out the element

这样做,

array.splice(index,1);

因为该方法返回一个拼接项的数组,该数组将替换修改后的数组。