意外的元素被拼接出阵列?

时间:2014-10-29 10:02:52

标签: javascript arrays

我有一些javascript(here's 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'。

为什么(我认为是)不正确的值被拼接出阵列?

如果有帮助,我正在使用chrome。

2 个答案:

答案 0 :(得分:2)

来自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))

答案 1 :(得分:2)

而不是

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

这样做,

array.splice(index,1);

因为该方法返回一个拼接项目数组,它正在替换您修改过的数组。