Как получить значения из хеш-таблицы ассоциативного массива Javascript? - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть массив, полный терминов и их определений, таких как:

 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 ]

2 голосов
/ 17 ноября 2010

Для начала, вы действительно хотите это:

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.
}
0 голосов
/ 17 ноября 2010

Чтобы перечислить один термин:

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/

0 голосов
/ 17 ноября 2010

Если я правильно следую, вы просто хотите получить список ссылок, метка - это то, что видит пользователь, а "def" - это "ссылка" ссылки?

Если да, то выможет сделать что-то вроде этого:

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 голосов
/ 17 ноября 2010

В текущей форме definitions[i].label и definitions[i].def - это то, что вы ищете.

Вы также можете попробовать поиграть с представлением, если хотите получить определения по их меткам вместо числовыхindex, то, что вы ищете, больше похоже на хеш, чем на массив.

В этом случае вы можете реорганизовать ваш массив в объект, и ключи будут метками.1009 * Это, конечно, меняет способ прохождения предметов, который теперь становится перечислением .

for (var label in definitions) {
   if (definitions.hasOwnProperty(key)) {
      // label is label
      // definition is definitions[label]
      alert(label + " => " + definitions[label]);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...