如何在javascript中从哈希中删除键+值

时间:2009-09-06 15:04:10

标签: javascript arrays

鉴于

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' };

我可以在spliceslice上找到的唯一文档处理整数索引器,我没有。

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

位置

更新

确定轻微的红色鲱鱼,删除似乎做了我想要的表面,但是,我正在使用json2.js将我的对象字符串化为json以推回服务器,

删除后,myHash被序列化为:

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

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

由于

4 个答案:

答案 0 :(得分:172)

您正在寻找delete

delete myhash['key2']

请参阅Core Javascript Guide

答案 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。可以更好地满足您的需求。如果你知道数组中的索引。