【问题标题】:merge 2 google chart dataTables to 1将 2 个谷歌图表数据表合并到 1 个
【发布时间】:2017-02-02 13:23:40
【问题描述】:

我有 2 个谷歌图表数据表,我想合并到 1 个谷歌图表数据表。

示例表 1:

1 |测试1 | 20

2 |测试2 | 30


示例表 2:

1 |测试1 | 20

3 |测试3 | 60


我想将 2 合并到:

1 |测试1 | 20

2 |测试2 | 30

3 |测试3 | 60

最好的方法是什么? 我的代码现在没有将它们组合起来,只是添加了行和列。 文档:https://developers.google.com/chart/interactive/docs/reference#join

oldjson = '
{
  "cols": [
        {"id":"","label":"Topping","pattern":"","type":"string"},
        {"id":"","label":"Slices","pattern":"","type":"number"}
      ],
  "rows": [
        {"c":[{"v":"Mushrooms","f":null},{"v":3,"f":null}]},
        {"c":[{"v":"Onions","f":null},{"v":1,"f":null}]}
      ]
}';

newjson = '
{
  "cols": [
        {"id":"","label":"Topping","pattern":"","type":"string"},
        {"id":"","label":"Slices","pattern":"","type":"number"}
      ],
  "rows": [
        {"c":[{"v":"Mushrooms","f":null},{"v":3,"f":null}]},
        {"c":[{"v":"Zucchini","f":null},{"v":1,"f":null}]}
      ]
}';


var oldData = new google.visualization.DataTable(oldjson);
var newdata = new google.visualization.DataTable(newjson);
console.log("old data", oldData);
console.log("new data", newdata);

// i want to merge the 2 datas here
var mergedData = google.visualization.data.join(oldData, newdata, 'full', [[0, 0]], [1], [1]);

console.log("merged data", mergedData);

【问题讨论】:

    标签: javascript jquery join datatable google-visualization


    【解决方案1】:

    鉴于问题中提供的示例表,

    您可能希望使用'full' 连接,所有列都使用keys

    dt1Columnsdt2Columns 的选项留空

    请参阅以下工作 sn-p...

    google.charts.load('current', {
      callback: drawChart,
      packages:['table']
    });
    
    function drawChart() {
      var data = google.visualization.arrayToDataTable([
        ['x', 'y1', 'y2'],
        [1, 'test1', 20],
        [2, 'test2', 30],
      ]);
    
      var data1 = google.visualization.arrayToDataTable([
        ['x', 'y1', 'y2'],
        [1, 'test1', 20],
        [3, 'test3', 60],
      ]);
    
      var joinData = new google.visualization.data.join(
        data,
        data1,
        'full',
        [[0,0], [1,1], [2,2]],
        [],
        []
      );
    
      var chart = new google.visualization.Table(document.getElementById('chart_div'));
      chart.draw(joinData);
    };
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chart_div"></div>

    编辑

    假设数据表始终具有相同的列数
    (互相)

    并且连接类型将始终相同

    您可以使用循环动态构建keys

    请参阅以下工作 sn-p...

    google.charts.load('current', {
      callback: drawChart,
      packages:['table']
    });
    
    function drawChart() {
      var data = google.visualization.arrayToDataTable([
        ['x', 'y1', 'y2'],
        [1, 'test1', 20],
        [2, 'test2', 30],
      ]);
    
      var data1 = google.visualization.arrayToDataTable([
        ['x', 'y1', 'y2'],
        [1, 'test1', 20],
        [3, 'test3', 60],
      ]);
    
      var keys = [];
      for (var i = 0; i < data.getNumberOfColumns(); i++) {
        keys.push([i, i]);
      }
    
      var joinData = new google.visualization.data.join(
        data,
        data1,
        'full',
        keys,
        [],
        []
      );
    
      var chart = new google.visualization.Table(document.getElementById('chart_div'));
      chart.draw(joinData);
    };
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chart_div"></div>

    【讨论】:

    • 是的,谢谢!但是如何让它更有活力呢?因为我并不总是知道列的数量
    • 谢谢 :) 仍然在解决我从中得到的错误 jsapi_compiled_format_module.js:26 Uncaught TypeError: Array.prototype.map called on null or undefined
    • 已修复(在 json 中出错)感谢您的帮助 WhiteHat
    • 我现在正在尝试做一些不同的事情,但由于缺乏文档而仍然遇到麻烦。 stackoverflow.com/questions/42066254/…
    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多