如何从JavaScript中的散列删除键+值
特定
var myHash = new Array(); myHash['key1'] = { Name: 'Object 1' }; myHash['key2'] = { Name: 'Object 2' }; myHash['key3'] = { Name: 'Object 3' };
我如何从哈希中删除key2
和object 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' };
唯一的文件,我可以findsplice
和slice
处理整数索引,我没有。
编辑:我也不知道'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删除方法 。 可以更好地满足您的需求。 如果你知道数组中的索引。