【问题标题】:how to remove key+value from hash in javascript如何从javascript中的哈希中删除键+值
【发布时间】:2009-09-06 15:04:10
【问题描述】:

给定

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 中的错误吗?还是我在删除时做错了什么?

谢谢

【问题讨论】:

  • 您正在做的是向对象添加属性,这与向数组/哈希添加元素不同。您正在寻找一种或多或少删除属性的方法。尝试删除 myHash.key1,如其他 cmets 所述。
  • 如果是哈希表,你应该使用var myHash = new Object()而不是var myHash = new Array()

标签: javascript arrays


【解决方案1】:

你正在寻找delete:

delete myhash['key2']

Core Javascript Guide

【讨论】:

  • 我认为这是正确的,这就是我首先尝试它的原因。它确实似乎有效,我的问题实际上在于Json.stringify,我更新了问题
  • 改用拼接功能。删除会在数组中留下一个洞。
  • Here 是前面提到的拼接函数。
  • myhash 的更改应该只在当前范围内发生时,这不是最佳选择。如果其他地方的变量引用myhash 对象,delete 可能会产生副作用。
【解决方案2】:

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

我想你会得到你想要的。

【讨论】:

  • 我一点也不喜欢新的。我更喜欢 var myHash = [];
  • 或者在这种情况下,myHash={}; :-)
  • 我同意。数组给你的唯一东西是一个长度,当你改变索引器而不是 int 时,它永远不会起作用。
【解决方案3】:

您说您不一定知道“key2”在位置 [1]。好吧,事实并非如此。位置 1 将被 myHash[1] 占据。

您正在滥用 JavaScript 数组,它(如函数)允许键/值哈希。尽管 JavaScript 允许它,但它并没有像为关联数组设计的语言那样为您提供处理它的工具。 JavaScript 的数组方法仅适用于编号属性。

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

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 没有索引正是问题所在
    • 嘿@AndrewBullock 我有一个查询我得到 JSON 数组 例如:[{\"Countrycode\":\"DE\",\"count\":\"3\"}] 但我想要像这样[{“DE”:“3”}],但我没有得到这个输出请帮助我
    猜你喜欢
    • 2023-04-09
    • 2021-05-25
    • 2013-08-31
    • 2013-10-09
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多