我有一些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。
答案 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);
因为该方法返回一个拼接项目数组,它正在替换您修改过的数组。