如何从JavaScript中的散列删除键+值

特定

var myHash = new Array(); myHash['key1'] = { Name: 'Object 1' }; myHash['key2'] = { Name: 'Object 2' }; myHash['key3'] = { Name: 'Object 3' }; 

我如何从哈希中删除key2object 2 ,它在一个状态下结束,就像我做的一样:

 var myHash = new Array(); myHash['key1'] = { Name: 'Object 1' }; myHash['key3'] = { Name: 'Object 3' }; 

删除不做我想要的;

 delete myHash['key2'] 

只是给了我这个:

 var myHash = new Array(); myHash['key1'] = { Name: 'Object 1' }; myhash['key2'] = null; myHash['key3'] = { Name: 'Object 3' }; 

唯一的文件,我可以findspliceslice处理整数索引,我没有。

编辑:我也不知道'key2'是必然的位置[1]

UPDATE

好的,看起来好像做了一些我想要的东西,但是,使用json2.js来把我的对象串接到json,把它推回服务器,

删除之后,myHash被序列化为:

 [ { Name: 'Object 1' }, null, { Name: 'Object 3' } ] 

这是json2.js中的错误吗? 或者是在做什么我做错了删除?

谢谢

你正在寻找delete

 delete myhash['key2'] 

请参阅核心Javascript指南

为什么你使用new Array(); 为哈希? 您需要使用new Object()

我想你会得到你想要的。

你说你不一定知道'key2'在位置[1]。 那么,不是的。 位置1将被myHash [1]占用。

您正在滥用JavaScript数组,其中(如函数)允许键/值散列。 即使JavaScript允许它,它也不给你设施来处理它,作为为关联数组devise的语言。 JavaScript的数组方法只能使用编号的属性。

你应该做的第一件事是切换到对象而不是数组。 你没有一个好的理由在这里使用一个数组而不是一个对象,所以不要这样做。 如果你想使用一个数组,只需对这些元素进行编号并放弃哈希的思想。 数组的意图是保存可以被数字化索引的信息。

当然,如果你喜欢,你可以把一个哈希(对象)放入一个数组中。

 myhash[1]={"key1","brightOrangeMonkey"}; 

另一个选项可能是这个John Resig删除方法 。 可以更好地满足您的需求。 如果你知道数组中的索引。