我有一个数组:
data.Dealer.car[0]
data.Dealer.car[1]
data.Dealer.car[2]
如果我这样做:
alert(data.Dealer.car.length);
delete data.Dealer.car[1];
alert(data.Dealer.car.length);
每次输出的计数值都相同。已经删除的元素是否仍然存在?我有一个数组:
data.Dealer.car[0]
data.Dealer.car[1]
data.Dealer.car[2]
如果我这样做:
alert(data.Dealer.car.length);
delete data.Dealer.car[1];
alert(data.Dealer.car.length);
每次输出的计数值都相同。已经删除的元素是否仍然存在?如果你想要移除一个元素,可以使用splice
方法:
alert(data.Dealer.car.length);
data.Dealer.car.splice(1, 1);
alert(data.Dealer.car.length);
但需要注意的是索引已经发生了改变。
JavaScript数组不是稀疏的。如果您有0和2,则元素1必须存在,这意味着length
将会是3。
let arr = ['foo' , , 'bar']
是一个稀疏数组,因此它的长度为3
,即使arr[1]
没有值。 - chharveyArray.shift()会从数组中删除第一个项目并使其变短。 Array.pop()将删除最后一个项目。
基于 @Ray Hidayat 的回答:
JavaScript 数组是稀疏的。如果你有一个长度为 3 的数组,在 [1] 处删除引用只会简单地“取消设置”该项,而不会将其从数组中删除或更新该数组的长度。可以使用
myArray = [0, , 2, , , , ]; // length 6; last three items undefined
我想你在寻找这个:
var arr = [0,1,2,3,4];
alert( arr.splice( 2, 1 ) ); // alerts 2, the element you're removing
alert( arr ) // alerts 0,1,3,4 - the remaining elements
这里有一个MDC参考资料
好的,现在已经修复了,因为数组仍然被分配了。
我基本上需要做的是:
var newCar = new Array();
for (i = 0 ; i < tblSize -2; i ++)
{
newCar[i]=data.Dealer.car[i];
}
data.Dealer.car = newCar;
delete
和Array.prototype.splice
之间的区别,而这个问题基本上是在问为什么从数组中删除一个元素(从而使其变成稀疏数组)不会减少它的长度。 - chharvey