为什么JavaScript返回错误的数组长度?
var myarray = ['0','1'];
delete myarray[0];
alert(myarray.length); //gives you 2
答案 0 :(得分:13)
答案 1 :(得分:5)
你必须使用array.splice - 请参阅http://www.w3schools.com/jsref/jsref_splice.asp
myarray.splice(0, 1);
这将删除第一个元素
答案 2 :(得分:1)
根据this docs,删除操作符不会更改earray的长度。你可以使用splice()。
答案 3 :(得分:1)
来自Array的MDC文档:
“当你删除数组元素时, 数组长度不受影响。对于 例如,如果删除[3],则[4]为 仍然是[4]和[3]未定义。这个 即使你删除了最后一个也保持 数组的元素(删除 一个[则为a.length-1])“。
https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array
答案 4 :(得分:1)
您可以使用John Resig的漂亮remove()方法执行此操作:
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
比
// Remove the second item from the array
array.remove(1);
// Remove the second-to-last item from the array
array.remove(-2);
// Remove the second and third items from the array
array.remove(1,2);
// Remove the last and second-to-last items from the array
array.remove(-2,-1);
答案 5 :(得分:0)
这是正常行为。 delete()函数不会删除索引,只会删除索引的内容。所以你在数组中仍然有2个元素,但在索引0你将有undefined
。