为什么不从Javascript数组中删除更改其长度?

joe*_*e90 12 javascript

我有一个数组:

data.Dealer.car[0]
data.Dealer.car[1]
data.Dealer.car[2]
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

alert(data.Dealer.car.length);
delete data.Dealer.car[1];
alert(data.Dealer.car.length);
Run Code Online (Sandbox Code Playgroud)

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

Gum*_*mbo 20

如果要删除项目,请使用以下splice方法:

alert(data.Dealer.car.length);
data.Dealer.car.splice(1, 1);
alert(data.Dealer.car.length);
Run Code Online (Sandbox Code Playgroud)

但请注意,指数已发生变化.


Ray*_*yat 14

JavaScript数组不稀疏,如果你有一个0和一个2,那么元素1必须存在.意思length是将会是3.

  • 是的,JavaScript数组实际上可能很稀疏. (2认同)

Jer*_*nch 5

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


zed*_*d45 5

以@Ray Hidayat发布的内容为基础:

JavaScript数组稀疏.如果你有一个长度为3的数组,删除[1]处的引用将只是"取消设置"该项,而不是从数组中删除它,或者更新该数组的长度.你可以完成同样的事情

myArray = [0, , 2, , , , ];  // length 6; last three items undefined
Run Code Online (Sandbox Code Playgroud)

这是一个小提琴:http: //jsfiddle.net/WYKDz/

注意:从大型数组中间删除项目可能是计算密集型的.有关更多信息,请参阅此文章: 从Array中间删除一个条目的最快方法()

  • @DaraJavaherian:这就是稀疏的意思.(不是吗?至少说出你对它的定义是什么......) (4认同)