【问题标题】:How to retrieve values from Javascript associative array hash table?如何从 Javascript 关联数组哈希表中检索值?
【发布时间】:2011-05-11 01:58:54
【问题描述】:

我有一个充满术语及其定义的数组,如下所示:

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

【问题讨论】:

    标签: javascript jquery hashtable


    【解决方案1】:

    对于初学者,你真的想要这个:

    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.
    }
    

    【讨论】:

    • 问题是我在 JQuery 自动完成中成功使用了这段代码,如果需要进行更改,我只想有一个数组来列出所有内容,而不是制作不同格式的多个副本方式。
    • 我不确定我是否关注你。您希望对数组的更改自动传播到文档或其他东西。?
    【解决方案2】:

    如果我没听错,你只想得到一个链接列表,标签是用户看到的,“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

    【讨论】:

    • 如何在 html &lt;script&gt; 标签中调用它?我想将此代码 $.each(definitions, function(index, item) { etc 放在我特别希望发生这种情况的 HTML 页面中。如果 definitions[] 数组位于标题中列出的另一个文件中,此代码可以访问它吗?
    • 是的,如果您在文档头部加载带有该数组的外部 JS 文件并在 HTML 下方使用&lt;script/&gt;,它应该可以正常工作。
    【解决方案3】:

    列出单个术语:

    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/

    【讨论】:

      【解决方案4】:

      在当前形式中,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]);
         }
      }
      

      【讨论】:

      • definitions[i].labeldefinitions[0].label 不幸的是不起作用。什么都没有输出。
      猜你喜欢
      • 2012-09-02
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2011-03-09
      • 2016-11-25
      • 2012-09-14
      • 1970-01-01
      相关资源
      最近更新 更多