簡體   English   中英

如何從Javascript關聯數組哈希表中檢索值?

[英]How to retrieve values from Javascript associative array hash table?

我有一個充滿術語的數組,它們的定義如下:

 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或定義的鏈接。 但是首先我需要克服這個障礙。

首先,你真的想要這個:

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

在當前的表單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]);
   }
}

如果我正確地遵循,您只想得到一個鏈接列表,標簽是用戶看到的內容,“ 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

列出單個術語:

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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM