【问题标题】:Create table from JSON object in JavaScript在 JavaScript 中从 JSON 对象创建表
【发布时间】:2017-07-27 03:02:49
【问题描述】:

我正在尝试创建一个 HTML 表格,其中包含用于绘制绘图的信息。 我不想查询数据库两次,我想用信息创建图表和表格。 这是我从服务器得到的,它被绘制成图表:

var data = {
              "selector":"#charttotalday",
              "jsondata":[
                 {
                    "label":"Client1",
                    "data":[
                            [1382670000000,110157],
                            [1382756400000,199055],
                            [1382842800000,362996],
                            [1382929200000,302],
                            [1383015600000,169],
                            [1383102000000,88],
                            [1383188400000,49]
                            ],
                    "points":{
                       "fillColor":"#88bbc8"
                    }
                 },
                 {
                    "label":"Client2",
                    "data":[
                            [1382670000000,58611],
                            [1382756400000,112268],
                            [1382842800000,193060],
                            [1382929200000,115],
                            [1383015600000,45],
                            [1383102000000,65],
                            [1383188400000,18]
                            ],
                    "points":{
                       "fillColor":"#ed7a53"
                    }
                 },
                 {
                    "label":"Client3",
                    "data":[
                            [1382670000000,65534],
                            [1382756400000,118362],
                            [1382842800000,200058],
                            [1382929200000,123],
                            [1383015600000,65],
                            [1383102000000,53],
                            [1383188400000,26]
                    ],
                    "points":{
                       "fillColor":"#9FC569"
                    }
                 }
              ]
           };

由于信息的组织方式,我无法使用 $.each 对其进行循环并创建格式的表格:

                Client1  Client2  Client3
1382670000000 |  10157 |  58611 |  65534 | 
1382756400000 |  99055 |  12268 |  18362 |
1382842800000 |  62996 |  93060 |  10058 |
1382929200000 |    302 |    115 |    123 |
1383015600000 |    169 |     45 |     65 |
1383102000000 |     88 |     65 |     53 |
1383188400000 |     49 |     18 |     26 |

我认为最好的方法是读取对象并创建一个具有我需要的结构的新对象,可以与 $.each 一起使用。

我已经试过了:

$.each(data.jsondata, function(key, value) {
    thead += '<th>' + value.label + '</th>';
    tableData[value.label] = new Object();
    $.each(value.data, function(key1, value1) {
        $.each(value1, function(key2, value2) {
            if(key2 == 0) {
                //here I have the time line, axis Y
                index = value2;
            }
            if(key2 == 1) {
                //here I have the values for the table
                tableData[value.label][index] = value2;
            }
        });
    });
});

thead += '</tr>';

但这只会用我需要的信息创建一个更简单的元素,但仍然不能变成我需要的。

有人可以指点我正确的方向吗?

【问题讨论】:

  • 真的不清楚你在问什么......请更具体。也建议你在 jsfiddle.net 中创建一个演示
  • 在使用$.each之前为什么不想把data.jsondata转换成合适的结构数组
  • @charlietfl:我已经按照 flot 需要的方式格式化了数据,但没有正确组织,无法轻松用于创建表格。
  • @jonasnas:我该怎么做?我想做,不知道怎么做。谢谢。

标签: javascript json charts html-table each


【解决方案1】:

这会将您的数据映射到表格:

 var headers=[ ""], rows={}
  $.each(data.jsondata,function(clientIdx,item){
      headers.push(item.label );
      $.each( item.data,function(i,arr){
        if( !rows[arr[0]]){
         rows[arr[0]]=[];
        }
        rows[arr[0]][clientIdx]=arr[1];
      })
  })


  var rowHtml='<tr><th>'+headers.join('</th><th>')+'</th></tr>';
  $.each(rows,function(key, arr){
    rowHtml+='<tr><td>'+key+'</td>';
    rowHtml +='<td>'+arr.join('</td><td>')+'</td></tr>';

  })

  $('#table').html(rowHtml);

DEMO

【讨论】:

  • 唯一的问题是如果每个日期都没有每个客户的条目...尚未测试该场景,基本上该行的数组中将包含空元素。我认为仍然会正确组织真实的日期
  • 是的,你是对的。我看到的唯一解决方案是遍历所有日期并创建一个完整列表并将其用作索引。我不认为我可以在 sql 查询期间完成它。
  • 不确定您在这方面要寻找什么...在我的演示中注释掉原始数组中的一些条目的简单测试似乎仍然可以正常工作...单元格只是显示为空白。如果需要打印一些东西...可以遍历每个行数组并放置一个占位符,例如“none”或其他任何东西
  • 在我的演示中,由于缺少 TD,它们向左移动,左侧有空白吗?我的只在右边。再次感谢。
  • 您使用的是什么浏览器?我只在 Firefox & chrome 中查看过
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2019-10-28
  • 2018-04-11
相关资源
最近更新 更多