0

我在使用 JSdelete()函数时遇到了一点问题。

直接来自 Chrome Inspector:

> x = [{name: 'hello'}, {name: 'world'}]
> [Object, Object]
> delete x[0]
> true
> $.each (x, function (i, o) {console.log(o.name);})
> TypeError: Cannot read property 'name' of undefined
> x
> [undefined × 1, Object]

你知道为什么会这样吗?这引起了我的问题each

4

3 回答 3

1

删除x[0]与从数组中切出该条目不同。x[1]换句话说,元素 1 仍然在,所以x[0]也是undefined

于 2013-07-19T15:06:38.347 回答
1

要从数组中正确删除对象,您应该使用splice 方法

x = [{name: 'hello'}, {name: 'world'}];
x.splice(0,1);
于 2013-07-19T15:07:39.707 回答
0

Array 数据结构上的 delete() 方法有点误导。当您执行以下操作时:

var a = ['one', 'two', 'three'];
delete a[0];

delete() 执行类似于将数组元素分配给未定义的操作。请注意,使用 delete() 后,数组不会移动,长度保持不变:

a.length -> 3
a[0] -> undefined

所以本质上,delete() 创建了一个稀疏数组,不会改变长度属性,也不会删除元素。要完全删除元素,您需要执行以下操作:

a.splice(0,1)

这将删除元素并更改数组的长度属性。所以现在:

a.length -> 2

有关方法参数的详细信息,请参阅splice方法。

于 2013-07-19T15:29:08.277 回答