2010-11-16 10 views
0

J'ai une gamme complète de termes et leurs définitions comme ceci:Comment récupérer des valeurs de table de hachage de tableau associatif 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 
       ] 

Je veux écrire une boucle for qui fonctionne essentiellement par chaque « étiquette » et donne la liste des. Pour la simple énumération d'un seul terme que j'ai essayé différentes manières et aucun n'a travaillé:

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

ou

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

ou

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

Et aucun d'entre eux ont travaillé. Mon résultat final désiré utilise une boucle for pour lister toutes les étiquettes comme des liens qui pointent vers la def ou la définition. Mais d'abord j'ai besoin de surmonter cet obstacle.

Répondre

2

Pour commencer, vous voulez vraiment ceci:

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

Vous accéderait la propriété def avec definitions[0].def. Pour looping:

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

La chose est que je utilise ce code avec succès dans un autocomplete JQuery, et si des changements doivent être apportés Je veux seulement avoir un seul tableau où je liste tout plutôt que de faire plusieurs copies formatées de différentes manières. – sxflynn

+0

Je ne suis pas sûre de te suivre. Vous voulez que les modifications apportées au tableau se propagent automatiquement au document ou à quelque chose.? – cdhowie

0

Dans la forme actuelle definitions[i].label et definitions[i].def sont ce que vous cherchez.

Vous pouvez également essayer de jouer avec la représentation si vous voulez accéder à des définitions par leurs étiquettes au lieu d'un index numérique, ce que vous cherchez ressemble plus à un hachage qu'à un tableau.

Dans ce cas, vous pouvez réorganiser votre tableau en un objet, et les clés seront les étiquettes.

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

Bien sûr, change la façon dont vous allez à travers les articles, qui devient maintenant une énumération .

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

'définitions [i] .label' ou' définitions [0] .label' ne fonctionnent malheureusement pas. Rien n'est sorti. – sxflynn

+0

vous faites quelque chose de mal http://jsbin.com/ofuza4/edit (cliquez l'aperçu) – galambalazs

0

Si je suis correctement vous voulez juste se retrouver avec une liste de liens, l'étiquette étant ce que l'utilisateur voit et le « def » étant le « href » du lien?

Si oui, vous pourriez faire quelque chose comme ceci:

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>'); 
}); 

un exemple de travail ici: JSFiddle

+0

Comment est-ce que j'appellerais ceci à l'intérieur des balises html '