У меня есть этот образец массива JSON, и я не знаю, как перебирать их и использовать при создании строки таблицы.
Образец кода:
var data = [
{foo1:"a",foo2:"b",foo3:"c"},
{foo1:"d",foo2:"e",foo3:"f"},
{foo1:"g",foo2:"h",foo3:"i"}
]
Я использовал этот метод:
$.each(data, function (key, value) {
rows += "<tr id = " + key + "><td>" + value.foo1+ "</td><td>" + value.foo2+ "</td><td>" + value.foo3+ "</td><td>"</tr>";
});
// Но я хочу сделать его более гибким, чтобы я мог повторно использовать его для создания других строк из другого массива JSON, как в этом сценарии:
var dataNew = [
{lorem1:"j",lorem2:"k",lorem3:"l"},
{lorem1:"m",lorem2:"n",lorem3:"o"},
{lorem1:"p",lorem2:"q",lorem3:"r"},
{lorem1:"x",lorem2:"s",lorem3:"t"},
{lorem1:"w",lorem2:"y",lorem3:"z"}
]
//Теперь я не могу использовать метод выше



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Мы можем использовать Object.entries() для динамического получения ключа и значения.
var data = [
{foo1:"a",foo2:"b",foo3:"c"},
{foo1:"d",foo2:"e",foo3:"f"},
{foo1:"g",foo2:"h",foo3:"i"}
]
var dataNew = [
{lorem1:"j",lorem2:"k",lorem3:"l"},
{lorem1:"m",lorem2:"n",lorem3:"o"},
{lorem1:"p",lorem2:"q",lorem3:"r"},
{lorem1:"x",lorem2:"s",lorem3:"t"},
{lorem1:"w",lorem2:"y",lorem3:"z"}
]
const parseData = (data,table) => {
let rows = "";
data.forEach(d1 =>{
rows += "<tr>"
Object.entries(d1).forEach(d2 => {
rows += "<td id='" + d2[0] + "'>" + d2[1] + "</td>"
})
rows + = "</tr>"
})
table.innerHTML = rows
}
parseData(data,document.querySelector("#table1"))
parseData(dataNew,document.querySelector("#table2"))<table border = "1" id = "table1">
<table>
<br/>
<table border = "1" id = "table2">
<table>Вы можете собрать возможные ключи, которые появляются в объектах, которые у вас есть в массиве. Затем выполните итерацию по исходному массиву объектов и внутри итерации по массиву ключей, чтобы получить значения и создать строки.
Сначала необходимо собрать ключи, поскольку JavaScript не гарантирует порядок свойств внутри объекта. Если вы знаете, что каждый объект в массиве имеет одинаковые свойства, вы можете собирать ключи только из первого объекта, вместо того, чтобы перебирать все элементы.
Также обратите внимание, что создание элементов DOM путем объединения строк небезопасно, поскольку этот подход уязвим для внедрения кода. Присвоение значений свойству .textContent элементов DOM очищает содержимое.
var dataNew = [
{lorem1:"j",lorem2:"k",lorem3:"l"},
{lorem3:"o",lorem1:"m",lorem2:"n"},
{lorem2:"q",lorem1:"p",lorem3:"r"},
{lorem1:"x",lorem2:"s",lorem3:"t"},
{lorem1:"w",lorem3:"z",lorem2:"y"}
]
function renderTable(table, data) {
// Collect unique keys
var keys = Array.from(
data.reduce((acc, cur) => {
Object.keys(cur).forEach(key => acc.add(key));
return acc;
}, new Set())
);
// Columns
var columns = document.createElement('tr');
keys.forEach(key => {
var th = document.createElement('th');
th.textContent = key;
columns.appendChild(th);
});
table.appendChild(columns);
// Rows
data.forEach((row, idx) => {
var tr = document.createElement('tr');
tr.setAttribute('id', 'row-'+idx);
keys.forEach(key => {
var td = document.createElement('td');
// using text content is more secure, since it
// sanitizes the value and prevents code injections
td.textContent = row[key];
tr.appendChild(td);
});
table.appendChild(tr);
});
}
var table = document.getElementById('table');
renderTable(table, dataNew);<table id = "table">
</table>
К вашему сведению: у вас нет JSON. См. Объект Javascript против JSON и Что такое JSON