javascript - 将 2 个 google 图表数据表合并到 1 个

标签 javascript jquery join datatable google-visualization

我有 2 个 google 图表数据表,我想将它们合并到 1 个 google 图表数据表。

示例表 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);

最佳答案

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

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

dt1Columnsdt2Columns的选项留空

请参阅以下工作片段...

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>

编辑

假设数据表始终具有相同的列数
(彼此一样)

并且连接类型将始终相同

您可以使用循环动态构建

请参阅以下工作片段...

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>

关于javascript - 将 2 个 google 图表数据表合并到 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003388/

相关文章:

sql - INNER JOIN ON vs WHERE 子句

sql - Ora SQL 查询 : joining without references

javascript - 如何在浏览器中使用纯 html 和 javascript 的 IPFS

javascript - 是否可以在 Angular JS 中进行服务器端渲染(在旧版本中,即 2.0 之前的版本)?

javascript - 如何将文件输入的点击函数绑定(bind)到 "v-on"事件?

jquery - 如何停止 Handlebars 卡在 slider 上?

jquery - 需要禁用图像 map 上的点击事件

javascript - jQuery .submit() 成功或失败触发器

sql - MySQL - 将左连接限制为发生的第一个日期时间?

使用 scrollIntoView 的 JavaScript 平滑滚动效果