为什么’;从Javascript数组中删除是否会更改其长度?

为什么’;从Javascript数组中删除是否会更改其长度?,javascript,Javascript,我有一个数组: 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); 它每次都给我相同的计数。删除的元素是否仍然存在?JavaScript数组不是稀疏的,如果有0和2,则元素1必须存在。这意味着长度将为3。如果要删除项目,请使用拼接方法: a

我有一个数组:

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);

它每次都给我相同的计数。删除的元素是否仍然存在?

JavaScript数组不是稀疏的,如果有0和2,则元素1必须存在。这意味着
长度将为3。

如果要删除项目,请使用
拼接方法:

alert(data.Dealer.car.length);
data.Dealer.car.splice(1, 1);
alert(data.Dealer.car.length);
但是请注意索引已经更改。

Array.shift()将从数组中删除第一项并使其变短。
Array.pop()将删除最后一项。

我想您正在查找以下内容:

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

这是一个

好的。。现在已修复此问题,因为阵列仍在分配中

我基本上需要做:

var newCar = new Array();
for (i = 0 ; i < tblSize -2; i ++)
{
    newCar[i]=data.Dealer.car[i];
}
data.Dealer.car = newCar;
var newCar=newarray();
对于(i=0;i
建立在@Ray Hidayat发布的内容之上:

JavaScript数组是稀疏的。如果您有一个长度为3的数组,删除[1]处的引用只会“取消设置”该项,而不会将其从数组中删除,或更新该数组的长度。你可以用同样的方法来完成

myArray = [0, , 2, , , , ];  // length 6; last three items undefined
这是一把小提琴:

注意:从大型数组的中间删除项可能需要大量计算。有关更多信息,请参阅本文:

是的,元素2将是未定义的。当您删除数组中最后一个索引处的某个内容时会发生什么?如果删除最后一个元素,长度将保持不变。您可以设置长度以将数组缩小到您想要的任何大小。是的,JavaScript数组实际上可以是稀疏的。JS数组可以是稀疏的。稀疏数组是具有一个或多个未初始化元素的数组。例如,
let arr=['foo','bar']
是一个稀疏数组,因此它具有长度
3
,即使
arr[1]
没有值。是否删除最后一项?只需使用:data.Dealer.car.pop();这不是稀疏的意思。@DaraJavaherian:这就是稀疏的意思。(不?至少说出你对它的定义…)可能是@JarrodRoberson的复制品-它似乎不是完全的复制品。您链接的问题是询问
delete
Array.prototype.splice
之间的区别,而这个问题基本上是问为什么从数组中删除元素(从而使其稀疏)不会减少其长度。我对问题进行了编辑,以使其更清晰。