javascript - 从数组创建 HTML 表
问题描述
我从 Internet 获得了一张 Sheet,我首先获取它,然后将其处理为 JSON (processDataasJSON)。
之后的数组看起来只是一个简短的示例:
[object Object] {
Bunker fuels (Not in Total): 9,
Cement: 162,
Country: "ZIMBABWE",
Gas Flaring: 0,
Gas Fuel: 0,
Liquid Fuel: 1119,
Per Capita: 0.21,
Solid Fuel: 1902,
Total: 3184,
Year: 2013
}, [object Object] {
Bunker fuels (Not in Total): 9,
Cement: 14,
Country: "AFGHANISTAN",
Gas Flaring: 0,
Gas Fuel: 74,
Liquid Fuel: 1393,
Per Capita: 0.08,
Solid Fuel: 1194,
Total: 2675,
Year: 2014
}, [object Object] {
Bunker fuels (Not in Total): 23,
Cement: 299,
Country: "ALBANIA",
Gas Flaring: 0,
Gas Fuel: 16,
Liquid Fuel: 1053,
Per Capita: 0.54,
Solid Fuel: 191,
Total: 1559,
Year: 2014
如您所见,每年都有许多不同的年份和许多条目。
我现在想制作一个表格,其中只列出每一年和一个加在一起的所有国家总计的总计。
任何想法或帮助?
该表应如下所示:
解决方案
这是我将如何解决这个问题。首先创建一个带有表格轮廓的 HTML 文件:
索引.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Table From JSON</title>
<style type="text/css">
table,
td {
border: 1px solid black;
}
</style>
</head>
<body>
<h1>Table From JSON</h1>
<table>
<thead>
<tr>
<th>Year</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<!-- createRow inserts rows here -->
</tbody>
</table>
<script type="text/javascript" src="./main.js"></script>
</body>
</html>
然后,在 中main.js
,创建一个formattedData
对象并使用 JSON 数据中的总数填充它。正如塞巴斯蒂安在他的回答中所说,您可以使用它Array.prototype.reduce
来创建一个包含每年总数的对象。然后,您可以从此对象中提取数据以填充行。我在这里使用了一些虚拟数据,但是只要您使用正确的密钥,这应该适用于您的文件。
main.js
const tbody = document.querySelector('tbody');
const data = [
{
Total: 123,
Year: 2014,
},
{
Total: 100,
Year: 2015,
},
{
Total: 200,
Year: 2014,
},
{
Total: 300,
Year: 2015,
},
];
const formattedData = data.reduce((acc, val) => {
acc[val.Year] ? acc[val.Year] += val.Total : acc[val.Year] = val.Total;
return acc;
}, {})
const createRow = (year, total) => {
const tr = document.createElement('tr');
const yearTd = document.createElement('td');
const totalTd = document.createElement('td');
yearTd.textContent = year;
totalTd.textContent = total;
tr.appendChild(yearTd);
tr.appendChild(totalTd);
tbody.appendChild(tr);
};
for (let year in formattedData) {
createRow(year, formattedData[year])
}
这是项目的 JSFiddle 的链接,因此您可以实时编辑:JSON To Table。这是我机器上的截图。
推荐阅读
- r - 如何将 X 天组合在一起以获得总发生次数?
- ruby-on-rails - 从子模型 after_save/after_commit rails 更新父实例
- python - hidden_layer = layers.Dense(100, activation="relu")(input_layer) 是做什么的?
- java - 如何在 Java 中实现 add()?
- elasticsearch - 如何使用 Java API 获取 ClusterState 或 IndexMetaData
- reactjs - React:如何使用钩子通过 onClick 刷新组件
- javascript - 单击时仅向单个项目添加活动边框
- ios - 更新到 iOS 14.5 后“应用需要更新”
- php - 如何为每个字符添加随机数组值?
- javascript - 从 html 元素中获取 itemName 数据属性