javascript - 更改函数以生成表列而不是行
问题描述
我有一个用 JSON 数据制作表格的脚本,它可以工作。但为简洁起见,我需要将数据布置为垂直标题。换句话说,高度和日期在第一列,对应的数据在右边。
let PROGWandH = [ { height: "108.0", date: "2019-04-12 00:00:00" },{ height: "108.0", date: "2019-05-13 00:00:00" },{ height: "109.0", date: "2019-06-21 00:00:00" },{ height: "111.5", date: "2019-10-16 00:00:00" },{ height: "111.5", date: "2019-11-15 00:00:00" } ];
function generateTableHead(table, data) {
let thead = table.createTHead();
let row = thead.insertRow();
for (let key of data) {
let th = document.createElement("th");
let text = document.createTextNode(key);
th.appendChild(text);
row.appendChild(th);
}
}
function generateTable(table, data) {
for (let element of data) {
let row = table.insertRow();
for (key in element) {
let cell = row.insertCell();
let text = document.createTextNode(element[key]);
cell.appendChild(text);
}
}
}
let table = document.querySelector(".PROGWandH");
let data = Object.keys(PROGWandH[0]);
generateTable(table, PROGWandH);
generateTableHead(table, data);
<table class="PROGWandH"></table>
任何人都可以帮忙吗?
解决方案
您可以循环N次您的 Array 并使用.reduce()
将单元格字符串还原为行字符串并最终使用Element.insertAdjacentHTML(where, what)
const arr = [ { height: "108.0", date: "2019-04-12 00:00:00" },{ height: "108.0", date: "2019-05-13 00:00:00" },{ height: "109.0", date: "2019-06-21 00:00:00" },{ height: "111.5", date: "2019-10-16 00:00:00" },{ height: "111.5", date: "2019-11-15 00:00:00" } ];
const rows = Object.keys(arr[0]).reduce((row, pr) => (row += `<tr><th>${pr}</th>${arr.reduce((cells, ob) => (cells += `<td>${ob[pr]}</td>`, cells), '')}</tr>`, row), '');
// Insert once when done.
document.querySelector(".PROGWandH").insertAdjacentHTML('beforeend', rows);
<table class="PROGWandH"></table>
推荐阅读
- javascript - 无法访问 iframe 样式的高度和宽度并使用 JavaScript 进行更改
- powerbi - Running total based on other columns value
- raspberry-pi3 - “apt-get:找不到命令”问题 raspberry pi os 使用 Buildroot 构建
- php - PHP 控制表格在网页上的放置位置
- javascript - 反应 url 更改,但组件不查看/渲染
- python - 如何使用子进程库在顶级 python 文件中使用命令行参数调用其他 python 文件?
- javascript - 使用 HOC 时在子函数中获取道具
- c++ - std::unique_ptr 在其拥有的对象被手动删除后超出范围时如何工作?
- python - 在 matplotlib 中现有的 XY 图上绘制 Y 轴上的线,如图所示
- php - 需要在 HTML 电子邮件模板中自动插入未来日期