javascript - 使用纯 JS 将表转换为键值对
问题描述
我有一个由行号和价格组成的大表。我希望能够通过使用行号来查找价格。
function buildtable(){
var tableObj = document.getElementById( 'table' );
var allTRs = tableObj.getElementsByTagName( 'tr' );
for ( var trCounter = 0; trCounter < allTRs.length; trCounter++ )
{
var tmpArr = [];
var allTDsInTR = allTRs[ trCounter ].getElementsByTagName( 'td' );
for ( var tdCounter = 0; tdCounter < allTDsInTR.length - 1; tdCounter++ )
{
tmpArr.push( allTDsInTR[ tdCounter ].innerHTML );
}
arr.push( tmpArr );
}
}
以下代码创建一个列表列表。
如何更改函数以创建单个密钥对存储?
表格的 HTML
foreach($res as $row) {
$seat = $row['RowNumber'];
$price = $row['Zone.PriceMultiplier * 15.00'];
echo "<tr>";
echo "<td>".$seat."</td>";
echo "<td>".$price."</td>";
echo "<td><input type='checkbox' name='check_list[]' value=\"$seat;\" onclick='javatest(this);' </td>";
echo "</tr>";
}
解决方案
您可以使用对象作为键值映射(哈希表)。
function buildtable() {
var tableObj = document.getElementById('table');
var map = {};
var allTRs = tableObj.getElementsByTagName('tr');
for (var trCounter = 1; trCounter < allTRs.length; trCounter++) {
var tmpArr = [];
var allTDsInTR = allTRs[trCounter].getElementsByTagName('td');
if (allTDsInTR.length) {
map[allTDsInTR[0].innerHTML.trim()] = parseFloat(allTDsInTR[1].innerHTML.trim());
}
}
console.log(map);
}
buildtable();
<table id='table'>
<thead>
<tr>
<td>
RowNumber
</td>
<td>
Price
</td>
<tr>
</thead>
<tbody>
<tr>
<td>
U01
</td>
<td>
24.5
</td>
<tr>
<tr>
<td>
U02
</td>
<td>
22
</td>
<tr>
</tbody>
</table>
结果将类似于:
{
"U01": 24.5,
"U02": 22
}
推荐阅读
- servicestack - 将 ServiceStack 应用程序升级到 NetCore 3 后,只能在 Type.IsGenericParameter 为 true 的类型上调用方法
- snowflake-cloud-data-platform - 雪花中小选择查询的数值错误
- java - 在哪里需要更正检查用户在数据库中的重复电子邮件,使用 mvc webapp spring security,形成家庭登录注销
- hive - 在 hive 表中的同一列上进行分区和存储桶
- phpword - 为什么 phpword 忽略 html 列表中的段落样式?
- postgresql - PostgreSQL 在执行“更新”时获取的确切类型的锁是什么?
- extjs - ExtJS 6--将文本字段控件添加到动态网格列标题中
- math - 在画布游戏中使用负角
- php - 在 PHP 中的 query() 中插入 PROCEDURE
- sql - 在 SQL 中有条件地求和