鉴于
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' };
我可以在splice
和slice
上找到的唯一文档处理整数索引器,我没有。
编辑:我也不知道'key2'必然位于[1]
位置更新
确定轻微的红色鲱鱼,删除似乎做了我想要的表面,但是,我正在使用json2.js将我的对象字符串化为json以推回服务器,
删除后,myHash被序列化为:
[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ]
这是json2.js中的错误吗?或者是删除时我做错了什么?
由于
答案 0 :(得分:172)
答案 1 :(得分:11)
为什么使用new Array();
进行哈希?您需要使用new Object()
代替。
我认为你会得到你想要的东西。
答案 2 :(得分:6)
你说你不一定知道'key2'在位置[1]。嗯,事实并非如此。位置1将被myHash [1]占用。
您滥用JavaScript数组,其中(如函数)允许键/值哈希。即使JavaScript允许它,它也不会为你提供处理它的工具,因为为关联数组设计的语言会。 JavaScript的数组方法仅适用于编号属性。
您应该做的第一件事是切换到对象而不是数组。你没有充分的理由在这里使用数组而不是对象,所以不要这样做。如果你想使用数组,只需对元素进行编号并放弃哈希的想法。数组的目的是保存可以在数字上索引的信息。
当然,如果愿意,您可以将哈希(对象)放入数组中。
myhash[1]={"key1","brightOrangeMonkey"};
答案 3 :(得分:1)
另一个选项可能是John Resig remove method。可以更好地满足您的需求。如果你知道数组中的索引。