从嵌套对象中删除元素

新手上路,请多包涵

我有以下对象:

 {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}

在这个例子中我想删除

"1":{"cid":"1","uid":"3"}

从中。我已经尝试了在 Stack Overflow 上找到的所有解决方案,但无法使它们中的任何一个起作用。我主要是 PHP 人,所以我可能会在这里错过一些重要的东西?

原文由 Milos911 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 580
2 个回答

只需将 delete 与适当的属性一起使用。

 var obj = {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}};

delete obj["1"];

注意 " 围绕 1 将其标记为标识符而不是数组索引!

编辑 正如评论中指出的那样,无论您如何处理 [1] obj 都是一个对象而不是数组。我最后的说明只是为了明确说明您正在使用一个对象而不是一个数组。

根据我的经验,大多数人将整数属性与数组相关联,将字符串属性与对象相关联。所以我认为以给定的方式突出显示属性可能更有帮助。

原文由 Sirko 发布,翻译遵循 CC BY-SA 3.0 许可协议

 var myObj= {"2":{"cid":"2","uid":"2"},"1":{"cid":"1","uid":"3"}}

delete myObj['1'];

alert ( myObj['1']);

请注意 delete 存在跨平台问题:

跨浏览器问题

尽管 ECMAScript 使对象的迭代顺序依赖于实现,但似乎所有主要浏览器都支持基于最早添加的属性的迭代顺序(至少对于不在原型上的属性)。但是,在 Internet Explorer 的情况下,当对属性使用 delete 时,会产生一些令人困惑的行为,从而阻止其他浏览器使用像对象文字这样的简单对象作为有序关联数组。在 Explorer 中,虽然属性值确实设置为未定义,但如果稍后添加回一个具有相同名称的属性,该属性将在其旧位置迭代——而不是在迭代序列的末尾,正如人们在拥有之后所期望的那样删除属性,然后将其添加回来。

原文由 Royi Namir 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题