2010-11-16 80 views
0

我有一个数组充满术语及其定义是这样的:如何从Javascript关联数组哈希表中检索值?

var definitions = [ 
     {label : "abdomen", def: "stomach, stomach area, belly, tummy"}, 
     {label : "ability", def: "skill"}, 
     {label : "abolish", def: "end, do away with, get rid of"}, 
        etc 
       ] 

我想写一个for循环,基本上是通过每一个“标签”运行,并列出了出来。 对于只列出一个学期我已经尝试了不同的方式,没有工作过:

var definitionDiv = document.getElementById("definitionContainer"); 
definitionDiv.appendChild(document.createTextNode(definitions["abdomen")); 

definitionDiv.appendChild(document.createTextNode(definitions.def["abdomen")); 

definitionDiv.appendChild(document.createTextNode(definitions.label[1])); 

而且他们都没有工作。我期望的最终结果是使用for循环将所有标签列为指向def或定义的链接。但首先我需要克服这个障碍。

回答

2

对于初学者来说,你真的想这样:

definitionDiv.appendChild(document.createTextNode(definitions[0].label)); 

您将与definitions[0].def访问def属性。对于循环:

var i; 
for (i = 0; i < definitions.length; i++) { 
    var definition = definitions[i]; 
    // Use definition.label and definition.def however you want here. 
} 
+0

的事情是,我成功地使用这个代码在一个jQuery自动完成,如果需要作出改变,我只希望有一个单独的数组,我列出了所有内容,而不是以不同方式格式化多个副本。 – sxflynn 2010-11-16 21:13:00

+0

我不知道我跟着你。您希望对阵列进行更改以自动传播到文档或其他内容。 – cdhowie 2010-11-16 21:13:48

0

在目前的形式definitions[i].labeldefinitions[i].def是你在找什么。

如果你想通过它们的标签而不是数字索引访问定义,你也可以尝试使用表示,你所寻找的更像是一个散列而不是数组。

在这种情况下,您可能会将您的数组重新组织为一个对象,并且这些键将成为标签。

var definitions = { // objects are hashes 
    abdomen: "stomach, stomach area, belly, tummy", 
    ability: "skill", 
    abolish: "end, do away with, get rid of", 
    // key: value, 
    // ... 
}; 

当然,这改变了你经历的项目,现在成为枚举的方式。

for (var label in definitions) { 
    if (definitions.hasOwnProperty(key)) { 
     // label is label 
     // definition is definitions[label] 
     alert(label + " => " + definitions[label]); 
    } 
} 
+0

'定义[i] .label'或'definitions [0] .label'不幸运行。什么都不会输出。 – sxflynn 2010-11-16 21:22:21

+0

你做错了什么http://jsbin.com/ofuza4/edit(点击预览) – galambalazs 2010-11-16 21:53:08

0

,如果我下面正确,你只是想用的链接列表结束,标签是用户看到的内容与“高清”作为链接的“href”?

如果是这样,你可以做这样的事情:

var definitions = [ 
    { 
    label: "abdomen", 
    def: "stomach, stomach area, belly, tummy" 
    }, 
    { 
    label: "ability", 
    def: "skill" 
    }, 
    { 
    label: "abolish", 
    def: "end, do away with, get rid of" 
    } 

]; 

$.each(definitions, function(index, item) { 
    $('#definitionContainer').append('<a href="' + item.def + '">' + item.label + '</a>'); 
}); 

工作的例子在这里:JSFiddle

+0

我该如何在html里面调用这个'