如何从Javascript关联数组哈希表中检索值?

时间:2010-11-16 21:06:55

标签: javascript jquery hashtable

我有一个充满术语及其定义的数组:

 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或定义的链接。但首先我需要克服这个障碍。

4 个答案:

答案 0 :(得分:2)

首先,你真的想要这个:

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

您可以使用def访问definitions[0].def媒体资源。对于循环:

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

答案 1 :(得分: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]);
   }
}

答案 2 :(得分:0)

如果我正确关注你只想得到一个链接列表,标签是用户看到的标签,“def”是链接的“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

答案 3 :(得分:0)

列出单个词:

function getDef( which ) {
  for(var i=0,j=definitions.length; i<j; i++){
    if( definitions[i].label == which )
      return definitions[i].def;
  }
}

所以:

var foo = getDef('ability'); // etc

构建完整的定义列表:

var finalResult = $('<dl/>');

$( definitions ).each( function(i,e){
    var $dt = $('<dt/>').html( e.label );
    var $dd = $('<dd/>').html( e.def );
    finalResult.append( $dt, $dd );
});

$('#answer').append( finalResult );

以下是一个示例:http://jsfiddle.net/VyXdG/