Печать значений из массива JavaScript

#javascript #jquery #arrays

#javascript #jquery #массивы

Вопрос:

У меня есть массив, который выглядит следующим образом (полный список здесь):

 var verbMap = [
    {
        infinitive: "gehen",
        thirdPres: "geht",
        thirdPast: "ging",
        aux: "ist",
        pastPart: "gegangen",
        english: "go"
    },
    {
        infinitive: "gelingen",
        thirdPres: "gelingt",
        thirdPast: "gelang",
        aux: "ist",
        pastPart: "gelungen",
        english: "succeed"
    }
];
  

Я пытаюсь просмотреть каждую часть и распечатать ее в таблице. Я могу получить доступ к одному из значений, если я специально его настрою, но мне нужно иметь возможность печатать все значения в <td> s . Каждая часть массива будет представлять собой a <tr> со значениями внутри в качестве <td> тегов.

Каков наилучший способ сделать это, и есть ли лучший способ настроить данные и взаимодействовать с ними?

Ответ №1:

Создать таблицу с использованием вложенных циклов for не должно быть слишком сложно (в примере для построения элементов используется jQuery…но вам, очевидно, не нужно):

Редактировать

Удален jQuery, поскольку он, казалось, беспокоил всех (хотя управляющие структуры были важной частью примера):

 var table = document.createElement('table');

for(v in verbMap){
    var tr = document.createElement('tr');
    for(p in verbMap[v]){
         var td = document.createElement('td');
         var text = document.createTextNode(verbMap[v][p]);
         td.appendChild(text);
         tr.appendChild(td);
    }

    table.appendChild(tr);
}
  

Комментарии:

1. Для этого требуется jQuery, но в вопросе нет тега jQuery.

2. @Peter Olson — я обращаюсь к этому в сообщении. Пример предназначен для демонстрации используемого цикла, а не для точного построения элементов.

3. jQuery не был запрошен или указан каким-либо образом.

4. @AndrewPeacock innerText является нестандартным и не поддерживается Firefox. Смотрите мой ответ, если вам нужен этот браузер.

Ответ №2:

Попробуйте выполнить следующее

 for (var i = 0; i < verbMath.length; i  ) {
  var row = document.createElement('tr'); 
  var item = verbMath[i];
  for (var prop in item) {
    if (item.hasOwnProperty(prop)) {
      var data = document.createElement('td');
      data.innerText = item[prop];
      row.appendChild(data);
    }
  }

  // Need to append the row here to the appropriate place in your DOM
}
  

Комментарии:

1. 1 за использование обычного javascript (поскольку jQuery не был запрошен или указан) и за включение использования hasOwnProperty() .

Ответ №3:

Firefox не поддерживает innerText , поэтому лучше создать текстовый узел и добавить его к дочернему элементу. Также может быть лучше определить массив, чтобы гарантировать порядок столбцов и легко изменять его при необходимости.

 var table = document.getElementById("tbl"), i, j, tr, td, text;

var order = ["infinitive", "thirdPres", "thirdPast", "aux", "pastPart", "english"]

for(i=0; i<verbMap.length; i  ){
    tr = document.createElement('tr');
    for(j = 0; j<order.length; j  ){
         td = document.createElement('td');
         text = document.createTextNode(verbMap[i][order[j]]);
         td.appendChild(text);
         tr.appendChild(td);
    }
    table.appendChild(tr);
}
  

JSFiddle

Комментарии:

1. Большое вам спасибо. Я просто использую это как простое учебное пособие, в основном для себя, поэтому кроссбраузерная совместимость не вызывает беспокойства. Это будет полезно, если мне когда-нибудь понадобится использовать это в будущем, спасибо.

Ответ №4:

Есть несколько очень хороших инструментов для создания таблиц из таких структур данных. Рассмотрите возможность использования jQuery и подключаемого модуля Datatables.

Вот несколько ссылок:

jQuery: http://jquery.com /

Таблицы данных: http://datatables.net /

Комментарии:

1. Я пытался использовать jQuery, но не был уверен, как это сделать.

2. @AndrewPeacock, да, может показаться, что вы получаете целый набор инструментов, когда вы просто хотите вбить простой гвоздь, но если вы уделите этому немного времени, вы скоро сможете не только найти молоток, но и получать удовольствие от ускорения работы со всем набором инструментов.

3. Я знаю приличное количество, но для более сложных проблем, подобных этой, я теряюсь.