按索引删除数组
Delete array by index
JS delete()
函数有点问题。
直接来自Chrome检查器:
> 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
的问题
删除x[0]
与从数组中切片该条目不同。换句话说,元素1仍然处于x[1]
,因此x[0]
是undefined
。
要正确地从数组中删除对象,应该使用splice方法。
x = [{name: 'hello'}, {name: 'world'}];
x.splice(0,1);
数组数据结构上的delete()方法有点误导。当您执行以下操作时:
var a = ['one', 'two', 'three'];
delete a[0];
delete()的作用类似于将数组元素分配给undefined。注意,使用delete()后,数组不会移位,长度保持不变:
a.length -> 3
a[0] -> undefined
因此,从本质上讲,delete()创建了一个稀疏数组,不会更改length属性,也不会删除元素。要完全删除元素,您需要执行以下操作:
a.splice(0,1)
这将删除元素并更改数组的长度属性。所以现在:
a.length -> 2
有关方法参数的详细信息,请参见splice方法。
相关文章:
- 从组件状态的数组中删除元素
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 添加和删除隐藏字段数组中的值,而不提交表单
- 从数组中删除重复条目,并在javascript中按顺序排列
- 一些元素没有从数组中删除
- 删除JS数组中的最小数字
- 从数组中删除三元组项
- 删除重复的数组值,然后存储它们[反应]
- 在特定索引处剥离/删除数组中的值
- 数组删除重复结果Javascript
- 字符串替换或通过数组删除
- js中的对象数组:删除重复项
- KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用
- 用于垃圾收集的Javascript数组删除
- 为什么”——数组.删除数组的最后一个元素
- PHP循环通过脚本数组&删除项目
- 谷歌地图API:试图使用数组删除多个标记
- 带有for循环+条件的Javascript数组删除不必要的元素
- 在JavaScript中管理像ArrayList这样的数组:删除一个元素并关闭创建的间隙