2010-11-16 79 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裏面調用這個'