“;字典“;在JavaScript中创建

Trouble with "dictionary" creation in JavaScript

本文关键字:创建 字典 JavaScript      更新时间:2023-09-26

好吧,首先让我告诉你,我也在JavaScript方面还远远没有经验。。。(

也许我甚至试图实现该语言实际上不支持的东西?)。

所以。。。我们到了。。。

我想创建这样的结构(这只是一个示例):

Addresses
    --- John
           --- Phone
           --- Address
    --- Peter
           --- Phone
           --- Address

所以,我已经看到(或者我只是猜测)我可以做这样的事情(我已经在Chrome的JavaScript控制台中运行了所有测试):

var addresses = [];
addresses["John"] = {};
addresses["John"].Phone = "12312312312";
// And so on...

但是:

  • 如果我执行CCD_ 1,则构造适当的124条目数组
  • 如果我执行addresses['somestring'] = {};,则addresses保持为空数组[]

我做错了什么?JavaScript中是否没有对正确的字典(或地图——无论如何调用)的本地支持?


请注意:我希望能够逐步向地址添加条目,以及向每个地址条目添加密钥(而不仅仅是一次创建)。

您正在创建一个数组,但随后将其用作对象(这是可能的,因为数组恰好是一个对象)。要包含属性而不是编号索引,您应该使用一个对象:

var addresses = {};
addresses["Holmes"] = { Phone: "14", Address: "Baker street 221b" };

JavaScript有对象和数组。

数组是一种对象类型,它处理具有特殊意义的数值属性。它将有一个基于最高值属性名称(即数字)的length属性,并且它有pushpopforEach等方法来根据数字操作其数字成员。

如果我执行addresses['123'] = {};,则构造一个适当的124条目数组。

您已经有了一个数组。这只是添加了一个名为addresses['123'] = {};0的成员,并更新了其length

If I do addresses['somestring'] = {};

这将把该成员添加到数组中,但它不会出现在任何访问数组成员的常规方法中。您必须按名称访问它。

不要将命名属性赋予数组。使用普通对象。

是否没有本地支持正确的字典

一个物体是尽可能接近的。

如果您想要排序,请使用具有数字属性的数组。

如果您想要具有命名键的东西,请使用对象。

执行此操作时,addresses['somestring'] = {};将得到一个空数组,因为{}正在分配一个空对象。

相反,如果执行addresses["dd"] = {s: "s"},则addresses将具有对象

Javascript没有字典、映射或关联数组。

然而,它确实有一些非常相似的对象。(它们也可能大不相同,所以这一点很重要。)

更令人困惑的是,数组对象。你可以把随机属性放在一个数组上,它就会像一个对象一样工作。

Javascript数组采用整数[*]索引并调整.length属性。

对象采用字符串属性名称。这一点很重要:如果您使用不是字符串的东西,它将被转换为字符串。。通常称为[Object object]

可能想阅读以下内容:http://eloquentjavascript.net/chapter4.html

[*]是的,是的,他们真的是幕后操纵者。更容易将它们视为整数,避免这种悲伤。