[英]How create table from array comma separated strings javascript
I am trying to create an html table based on some input string separated by commas我正在尝试根据一些用逗号分隔的输入字符串创建一个 html 表
// HeaderTable = Headers Table
// DataTable = Body Table
Input Values:输入值:
headerTable = "Header1,Header2,Header3"
dataTable = [["TEST1,TEST1,TEST1"],["TEST2,TEST2,TEST2"],["TEST3,TEST3,TEST3"]]
Expected response:预期回应:
<table>
<thead>
<tr>
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>TEST1</td>
<td>TEST2</td>
<td>TEST3</td>
</tr>
<tr>
<td>TEST1</td>
<td>TEST2</td>
<td>TEST3</td>
</tr>
<tr>
<td>TEST1</td>
<td>TEST2</td>
<td>TEST3</td>
</tr>
</tbody>
</table>
Return a string of the html table code返回一串html表格代码
Expected response format Format Image预期响应格式格式图像
Try this:尝试这个:
<div id="container"></div>
let dataList = ["TEST1", "TEST2", "TEST3"] let headerList = [" Header 1", "Header 2", "Header 3"] let container = document.getElementById('container'); let thead = document.createElement('thead'); let th = document.createElement('th'); let tbody = document.createElement('tbody'); let td = document.createElement('td'); let tr = document.createElement('tr'); container.appendChild(tr); container.appendChild(thead); thead.appendChild(tr); for(let i = 0; i < headerList.length; i++){ th = document.createElement('th'); th.textContent = headerList[i]; tr.appendChild(th); } container.appendChild(tbody); tbody.appendChild(tr); for(let i = 0; i < dataList.length; i++){ td = document.createElement('td'); td.textContent = dataList[i]; tr.appendChild(td); }
Here:这里:
function createTable(a, b) {
let table = document.createElement("table");
let headerList = a;
let dataList = b;
var thead = document.createElement("thead");
table.appendChild(thead);
var tbody = document.createElement("tbody");
table.appendChild(tbody);
(function () {
var headerArray = headerList.split(", ");
var row = document.createElement("tr");
thead.appendChild(row);
for (var i = 0; i < headerArray.length; i++) {
var headerCell = document.createElement("th");
headerCell.innerText = headerArray[i];
row.appendChild(headerCell);
}
})();
(function () {
var dataArrays = [];
for (var i = 0; i < dataList.length; i++) {
dataArrays.push(dataList[i].split(", "));
}
var longest = dataArrays.reduce((a, b) => (a.length > b.length ? a : b), []);
for (var i = 0; i < longest.length; i++) {
var row = document.createElement("tr");
tbody.appendChild(row);
}
var rows = tbody.childNodes;
for (var i = 0; i < dataArrays.length; i++) {
for (var x = 0; x < dataArrays[i].length; x++) {
var cell = document.createElement("td");
cell.innerText = dataArrays[i][x];
rows[x].appendChild(cell);
}
}
for (var i = 0; i < rows.length; i++) {
for (var x = 0; x < rows[i].childNodes.length; x++) {
if (rows[i].childNodes.length !== longest.length - 1) {
var cell = document.createElement("td");
rows[i].appendChild(cell);
}
}
}
})();
return table;
}
/* --- Usage --- */
var headerList = "Header 1, Header 2, Header 3";
var dataList = ["TEST1, TEST1, TEST1", "TEST2, TEST2"];
var table = createTable(headerList, dataList);
document.body.appendChild(table);
This creates the table (exactly like the "expected response" ) and stores it in the table
variable.这将创建表(与“预期响应”完全一样)并将其存储在
table
变量中。 Simply use .appendChild(table)
to insert it into the DOM.只需使用
.appendChild(table)
将其插入到 DOM 中。
However, while this works, I really should recommend that you use nested arrays (instead of using strings).然而,虽然这有效,但我真的建议您使用嵌套数组(而不是使用字符串)。
Solution
解决方案
function convertStringToHtml(headers, body) {
var headersArr = headers.split(",");
var table = "<table>";
var tableHeader = "<thead><tr>";
var tableBody = "<tbody>";
var bodyArr = [];
// Order Array Data
var orderArr = [];
var responseArr = [];
const lengthBodyElementArr = body[0][0].split(",").length;
// Create Header Table
headersArr.forEach((headerTable) => {
tableHeader = tableHeader + "<th>" + headerTable + "</th>";
});
// Order Array
for (var increment = 0; increment < lengthBodyElementArr; increment++) {
orderArr = [];
body.forEach((bodyElement) => {
bodyElement.forEach((internalBodyElement) => {
bodyArr = internalBodyElement.split(",");
bodyArr.forEach((element, key) => {
if (key == increment) {
orderArr.push(element);
}
});
});
});
responseArr.push(orderArr);
}
// Create Body Table
responseArr.forEach((bodyList) => {
tableBody = tableBody + "<tr>";
bodyList.forEach((element) => {
tableBody = tableBody + "<td>" + element + "</td>";
});
tableBody = tableBody + "</tr>";
});
table =
"<table>" +
tableHeader +
"</tr></thead>" +
tableBody +
"</tbody>" +
"</table>";
return table;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.