【问题标题】:javascript objects with child objects - how to use it correctly带有子对象的 javascript 对象 - 如何正确使用它
【发布时间】:2014-12-22 06:18:29
【问题描述】:

我已经看到在 Python 中如何使用命名元组来存储和检索与键值关联的值,如下所示:

REQUIRED_FIELDS = {
    0: RequiredFields(LocalityDisplay=True, LocalityRequired=False, RegionDisplay=True, RegionRequired=False, PostcodeDisplay=True, PostcodeRequired=False),
    1: RequiredFields(LocalityDisplay=False, LocalityRequired=False, RegionDisplay=True, RegionRequired=True, PostcodeDisplay=True, PostcodeRequired=True),
    2: RequiredFields(LocalityDisplay=True, LocalityRequired=True, RegionDisplay=False, RegionRequired=False, PostcodeDisplay=True, PostcodeRequired=True),
    3: RequiredFields(LocalityDisplay=True, LocalityRequired=True, RegionDisplay=False, RegionRequired=False, PostcodeDisplay=True, PostcodeRequired=True),
    ..........
}

我正在尝试在 javascript 中复制上述代码。搜索时,我发现了一个对 javascript“嵌套字典”的晦涩且不是很有帮助的参考,但我找不到任何示例。我曾尝试搜索其他变体,但一无所获。这种方法会被称为“嵌套字典”还是换个名字?

我希望有人能对这个话题有所了解,并看一个例子,说明我怀疑这个 javascript 嵌套字典语法可能是如何设置的。

var addressNestedDictionary = {
    0: {"LocalityDisplay": 'True', "LocalityRequired": "False", "RegionDisplay": "True", "RegionRequired": "False", "PostcodeDisplay": "True", "PostcodeRequired": "False"}, 
    1: {"LocalityDisplay": "False", "LocalityRequired": "False", "RegionDisplay": "True", "RegionRequired": "True", "PostcodeDisplay": "True", "PostcodeRequired": "True"},
    2: {"LocalityDisplay": "True", "LocalityRequired": "True", "RegionDisplay": "False", "RegionRequired": "False", "PostcodeDisplay": "True", "PostcodeRequired": "True"},
    3: {"LocalityDisplay": "True", "LocalityRequired": "True", "RegionDisplay": "False", "RegionRequired": "False", "PostcodeDisplay": "True", "PostcodeRequired": "True"},
    ........
};

如果上述方法是正确的,我将如何调用嵌套字典?

【问题讨论】:

  • addressNestedDictionary[0].LocalityDisplayaddressNestedDictionary[0]["LocalityDisplay"]

标签: javascript dictionary nested


【解决方案1】:

JavaScript 有对象,而不是字典。您可以通过两种方式实例化一个对象:

var myObj = {};
var myObj = new Object();

对象允许您访问它们的命名属性。您可以在创建过程中设置属性:

var myObj = {
    0 : "fun",
    test : [1, 2, 3],
    "delete" : "you need to surround keywords, like delete, in quotes",
    "if" : "otherwise, the quotes are optional"
}

或者以后:

myObj.anArray = [];

对象属性甚至可以是另一个对象!

myObj.subObject = {};

您可以通过两种方式访问​​这些属性:

myObj["subObject"]    // equal to {}
myObj.subObject       // equal to {}

在您的情况下,您可以通过以下方式访问子对象:

addressNestedDictionary[0]
/* returns
   {
    "LocalityDisplay": 'True',
    "LocalityRequired": "False",
    "RegionDisplay": "True",
    "RegionRequired": "False",
    "PostcodeDisplay": "True", "PostcodeRequired": "False"
   }
*/

注意我如何使用addressNestedDictionary[0]。这是因为addressNestedDictionary.0 会是一个语法错误——它会被错误地解析。不过,括号和点这两种符号在其他方面的作用完全相同。

【讨论】:

  • Royhowie,谢谢我让对象和子对象正常工作。但是如何将值合并到 if 语句中?例如: if (addressNestedDictionary[$('#id_address_country_style_type').val()].LocalityDisplay ) { //do something true. } else { //做一些错误的事情。 }
  • @user1261774 应该可以工作,但您可能想先通过nestedAddress[someVal] && nestedAddress[someVal].LocalityDisplay检查对象是否存在
猜你喜欢
  • 2013-04-16
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
相关资源
最近更新 更多