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

And*_*ock 74 javascript arrays

特定

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

我如何从哈希中删除key2,object 2以便它最终处于一个状态,就像我做的那样:

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

删除不是我想要的;

delete myHash['key2'] 
Run Code Online (Sandbox Code Playgroud)

只是给我这个:

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

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

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

UPDATE

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

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

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ]
Run Code Online (Sandbox Code Playgroud)

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

谢谢

kar*_*m79 175

您正在寻找delete:

delete myhash['key2']
Run Code Online (Sandbox Code Playgroud)

请参阅Core Javascript指南

  • 改为使用拼接功能.删除在数组中留下一个洞. (6认同)
  • [这里](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice) 顺便提一下前面提到的拼接函数。 (2认同)

Eld*_*rov 11

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

我想你会得到你想要的东西.

  • 或者在这种情况下,myHash = {}; :-) (10认同)
  • 我根本不喜欢新的.我更喜欢var myHash = []; (4认同)

Nos*_*dna 6

你说你不一定知道'key2'在位置[1].嗯,事实并非如此.位置1将由myHash [1]占用.

你滥用JavaScript数组,它(如函数)允许键/值哈希.即使JavaScript允许它,它也不会为你提供处理它的工具,因为为关联数组设计的语言会.JavaScript的数组方法仅适用于编号属性.

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

当然,如果您愿意,可以将哈希(对象)放入数组中.

myhash[1]={"key1","brightOrangeMonkey"};
Run Code Online (Sandbox Code Playgroud)