Javascript 如何将html表转换为json所需格式
我有一个Javascript 如何将html表转换为json所需格式,javascript,jquery,json,Javascript,Jquery,Json,我有一个html表,我想将它转换成json格式,但我没有正确地得到它 根据我的格式,生成的json不符合我的格式 这是我的桌子 <table class="table" id="example-table"> <thead> <tr> <th>Product Name</th> <th>Price</th> <th>Quantit
html
表,我想将它转换成json
格式,但我没有正确地得到它
根据我的格式,生成的json
不符合我的格式
这是我的桌子
<table class="table" id="example-table">
<thead>
<tr>
<th>Product Name</th>
<th>Price</th>
<th>Quantity</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<tr class="allTheQuotationRow">
<td>flex board</td>
<td contenteditable="" class="priceChangeField">3</td>
<td contenteditable="" class="quantityChangeField">5</td>
<td>15</td>
</tr>
<tr class="allTheQuotationRow">
<td>sign board</td>
<td contenteditable="" class="priceChangeField">20</td>
<td contenteditable="" class="quantityChangeField">1</td>
<td>20</td>
</tr>
<tr class="allTheQuotationRow">
<td>flex board</td>
<td contenteditable="" class="priceChangeField">30</td>
<td contenteditable="" class="quantityChangeField">1</td>
<td>30</td>
</tr>
<tr class="allTheQuotationRow">
<td>sign board</td>
<td contenteditable="" class="priceChangeField">200</td>
<td contenteditable="" class="quantityChangeField">19</td>
<td>3800</td>
</tr>
<tr id="lastTotalRow">
<td>total</td>
<td></td>
<td></td>
<td>3865</td>
</tr>
</tbody>
</table>
这是我的JSFIDLE:
请帮我提前谢谢 使用querySelectorAll
和Array.from
迭代行(内联注释)
演示
var allRows=Array.from(document.queryselectoral(“tbody tr:not(:last child)”)//获取除最后一行之外的所有行
var-map={};
allRows.forEach(函数(行){
变量单元格=行。子项;
var prodName=单元格[0]。innerText;//按产品名称索引
map[prodName]=map[prodName]| |[];//初始化内部数组
映射[prodName]。推送({//将每行推送到相应产品名称的索引
价格:单元格[1]。innerText,
数量:单元格[2]。innerText,
金额:单元格[3]。innerText
});
});
控制台日志(map)代码>
品名
价格
量
数量
挠性板
3.
5.
15
标志牌
20
1.
20
挠性板
30
1.
30
标志牌
200
19
3800
全部的
3865
使用queryselectoral
和Array.from
迭代行(内联注释)
演示
var allRows=Array.from(document.queryselectoral(“tbody tr:not(:last child)”)//获取除最后一行之外的所有行
var-map={};
allRows.forEach(函数(行){
变量单元格=行。子项;
var prodName=单元格[0]。innerText;//按产品名称索引
map[prodName]=map[prodName]| |[];//初始化内部数组
映射[prodName]。推送({//将每行推送到相应产品名称的索引
价格:单元格[1]。innerText,
数量:单元格[2]。innerText,
金额:单元格[3]。innerText
});
});
控制台日志(map)代码>
品名
价格
量
数量
挠性板
3.
5.
15
标志牌
20
1.
20
挠性板
30
1.
30
标志牌
200
19
3800
全部的
3865
您可以使用reduce
将数组
转换为所需的对象
$('#convert-table').click(function() {
var table = $('#example-table').tableToJSON();
var result = table.reduce(function(acc, item) {
var key = item["Product Name"].replace(/ /g, "_");
if (!acc[key]) {
acc[key] = []
}
acc[key].push({
Price: item.Price,
Quantity: item.Quantity,
Amount: item.Amount
})
return acc;
}, {});
console.log(result);
});
jsiddle Link:您可以使用reduce
将数组
转换为所需的对象
$('#convert-table').click(function() {
var table = $('#example-table').tableToJSON();
var result = table.reduce(function(acc, item) {
var key = item["Product Name"].replace(/ /g, "_");
if (!acc[key]) {
acc[key] = []
}
acc[key].push({
Price: item.Price,
Quantity: item.Quantity,
Amount: item.Amount
})
return acc;
}, {});
console.log(result);
});
jsiddle Link:重构这样的数组可能是一个复杂的过程,但谢天谢地,有一个名为lodash的库,它有一个名为groupBy的函数。它可以在一行代码中解决您的问题!
\uu.groupBy(表,“产品名称”)
真的是这样!
重构这样的数组可能是一个复杂的过程,但幸好有一个名为lodash的库,它有一个名为groupBy的函数。它可以在一行代码中解决您的问题!
\uu.groupBy(表,“产品名称”)
真的是这样!
您可以使用相同的tableToJSON数据对象生成自定义格式,如下所示
var jsondata={};
table.forEach( function( data ){
var prodName = data["Product Name"];
jsondata[ prodName ] = jsondata[ prodName ] ?jsondata[ prodName ]: [];
jsondata[ prodName ].push({
Price : data['Price'],
Quantity : data['Quantity'],
Amount : data['Amount']
});
});
console.log(JSON.stringify(jsondata));
您可以使用相同的tableToJSON数据对象生成自定义格式,如下所示
var jsondata={};
table.forEach( function( data ){
var prodName = data["Product Name"];
jsondata[ prodName ] = jsondata[ prodName ] ?jsondata[ prodName ]: [];
jsondata[ prodName ].push({
Price : data['Price'],
Quantity : data['Quantity'],
Amount : data['Amount']
});
});
console.log(JSON.stringify(jsondata));