生成包含重复项计数的 Table 网格(JSON 数据)
Generate Table grid with count of repeating items (JSON Data)
我需要使用从 Sharepoint Online REST API 服务接收的 JSON 数据构建以下格式的网格 table。
需求示例,在22/05/202103:00Z至23/05/202102:59Z之间创建的数据应统计并显示在23/05/2021以下
JSON样本
{
"d": {
"results": [
{
"__metadNumber": {},
"Number": 21,
"Created": "2021-05-21T14:47:55Z"
},
{
"__metadNumber": {},
"Number": 21,
"Created": "2021-05-21T13:47:55Z"
},
{
"__metadNumber": {},
"Number": 28,
"Created": "2021-05-22T14:48:44Z"
}
],
"__next": ""
}
}
需要Table格式
Number
21/05/2021
22/05/2021
21
(2)
(0)
28
(0)
(1)
以下代码是我目前拥有的。问题是,这不会在相应的单元格中填充计数。
$(function(){
var requestUri = "SPO_Site/_api/web/lists/getbytitle('List_Name')/items?$top=100&$select=*";
$.ajax({url: requestUri, type: "GET", headers: {"accept":"application/json; odata=verbose"}, success: onSuccess,});
function onSuccess(data) {
var objItems = data.d.results;
var tableContent;
var tableRow;
for (var i = 0; i < objItems.length; i++) {
tableContent += '<td>' + moment(objItems[i].Created).format("DD/MM/YYYY") + '</td>';
tableRow += '<tr><td>' + objItems[i].Number + '</td></tr>';
}
$('#Date').append(tableContent);
$('#number').append(tableRow);
}
});
<table id='dateNumber' class="table table-striped table-sm small">
<tr>
<td id="Date"></td>
</tr>
<tr>
<td id="number"></td>
</tr>
</table>
您可以在 onSuccess
函数中执行以下操作:
var objItems = data.d.results;
var groups = [];
var dates = [];
objItems.forEach(function (item) {
var number = item.Number;
var date = moment(item.Created).format("DD/MM/YYYY");
var group = groups[number] || [];
var created = group[date] || 0;
group[date] = created + 1;
groups[number] = group;
if (dates.indexOf(date) === -1) {
dates.push(date);
}
});
var tableRows = "<tr><td>Number</td>";
dates.forEach(function (date) {
tableRows += "<td>" + date + "</td>";
});
tableRows += "</tr>";
groups.forEach(function (group, number) {
tableRows += "<tr><td>" + number + "</td>";
dates.forEach(function (date) {
tableRows += "<td>" + (group[date] || 0) + "</td>";
});
tableRows += "</tr>";
});
// TODO: append the table rows to the table
这将生成具有所需格式的 table 行(具有正确的 header 行)。
tableRows
的示例输出:
<tr><td>Number</td><td>21/05/2021</td><td>22/05/2021</td></tr><tr><td>21</td><td>2</td><td>0</td></tr><tr><td>28</td><td>0</td><td>1</td></tr>
这将导致 table:
Example output image
我需要使用从 Sharepoint Online REST API 服务接收的 JSON 数据构建以下格式的网格 table。
需求示例,在22/05/202103:00Z至23/05/202102:59Z之间创建的数据应统计并显示在23/05/2021以下
JSON样本
{
"d": {
"results": [
{
"__metadNumber": {},
"Number": 21,
"Created": "2021-05-21T14:47:55Z"
},
{
"__metadNumber": {},
"Number": 21,
"Created": "2021-05-21T13:47:55Z"
},
{
"__metadNumber": {},
"Number": 28,
"Created": "2021-05-22T14:48:44Z"
}
],
"__next": ""
}
}
需要Table格式
Number | 21/05/2021 | 22/05/2021 |
---|---|---|
21 | (2) | (0) |
28 | (0) | (1) |
以下代码是我目前拥有的。问题是,这不会在相应的单元格中填充计数。
$(function(){
var requestUri = "SPO_Site/_api/web/lists/getbytitle('List_Name')/items?$top=100&$select=*";
$.ajax({url: requestUri, type: "GET", headers: {"accept":"application/json; odata=verbose"}, success: onSuccess,});
function onSuccess(data) {
var objItems = data.d.results;
var tableContent;
var tableRow;
for (var i = 0; i < objItems.length; i++) {
tableContent += '<td>' + moment(objItems[i].Created).format("DD/MM/YYYY") + '</td>';
tableRow += '<tr><td>' + objItems[i].Number + '</td></tr>';
}
$('#Date').append(tableContent);
$('#number').append(tableRow);
}
});
<table id='dateNumber' class="table table-striped table-sm small">
<tr>
<td id="Date"></td>
</tr>
<tr>
<td id="number"></td>
</tr>
</table>
您可以在 onSuccess
函数中执行以下操作:
var objItems = data.d.results;
var groups = [];
var dates = [];
objItems.forEach(function (item) {
var number = item.Number;
var date = moment(item.Created).format("DD/MM/YYYY");
var group = groups[number] || [];
var created = group[date] || 0;
group[date] = created + 1;
groups[number] = group;
if (dates.indexOf(date) === -1) {
dates.push(date);
}
});
var tableRows = "<tr><td>Number</td>";
dates.forEach(function (date) {
tableRows += "<td>" + date + "</td>";
});
tableRows += "</tr>";
groups.forEach(function (group, number) {
tableRows += "<tr><td>" + number + "</td>";
dates.forEach(function (date) {
tableRows += "<td>" + (group[date] || 0) + "</td>";
});
tableRows += "</tr>";
});
// TODO: append the table rows to the table
这将生成具有所需格式的 table 行(具有正确的 header 行)。
tableRows
的示例输出:
<tr><td>Number</td><td>21/05/2021</td><td>22/05/2021</td></tr><tr><td>21</td><td>2</td><td>0</td></tr><tr><td>28</td><td>0</td><td>1</td></tr>
这将导致 table: Example output image