如何加入Google区域图表的两个数据集

时间:2015-04-13 08:30:52

标签: javascript google-visualization

我的服务器端代码返回一个json格式的响应,我需要在谷歌区域图表上显示。看起来像这样。

investment":
    [
        {
            "date":"2015-04-08",
            "amount":"110.00"
        },
        {
            "date":"2015-04-09",
            "amount":"100.00"
        }
    ],
"revenue":
    [
        {
            "amount":"60",
            "date":"2015-03-23"
        },
        {
            "amount":"250.5",
            "date":"2015-04-08"
        },

        {
            "date":"2015-04-09",
            "amount":"110.00"
        }
    ]

我正在尝试实现一个看起来像这样的数组。

[
    ["Date", "Investment", "Revenue"],
    ["2015-04-08", 0, 100.00],
    ["2015-04-18", 150.3, 50.00],
    ["2015-04-28", 40, ]
    ....
]

用文字说明:

  1. 如果两个数据集都包含相同日期的数据。他们进入单一阵列。
  2. 如果数据集没有日期值。它将为零。
  3. 到目前为止,我想出了下面的代码。这不是我想要的。将有重复日期,其中一个值始终为null。

    var dataAreaChart = [["Date", "Investment", "Revenue"]];
    
    if (data.investment != undefined && data.investment.length > 0) {
       for (var i = 0; i < data.investment.length; i++) {
           dataAreaChart.push([data.investment[i].date,  parseFloat(data.investment[i].amount), null]);
       }
    }
    
    if (data.revenue != undefined && data.revenue.length > 0) {
        for (var i = 0; i < data.revenue.length; i++) {
            dataAreaChart.push([data.revenue[i].date, null, parseFloat(data.revenue[i].amount)]);
        }
    }
    

    非常感谢任何指导。

1 个答案:

答案 0 :(得分:1)

我不确定是否可以直接使用给定结构中的数据。

所以,你可以做的是,重复投资&#39;和&#39;收入&#39;数组并创建数据的中间结构,从中可以生成所需的输出结构。

我假设日期在各个数组中都是唯一的。

您可以使用日期作为键创建一个新对象,并将investmentrevenue作为其属性。

var entries = {}

if (data.investment != undefined && data.investment.length > 0) {
    for (var i = 0; i < data.investment.length; i++) {
        entries[data.investment[i].date] = {'investment' : parseFloat(data.investment[i].amount), 'revenue' : 0 };
    }
}

if (data.revenue != undefined && data.revenue.length > 0) {
    for (var i = 0; i < data.revenue.length; i++) {
        if (entries.hasOwnProperty(data.revenue[i].date)) {
            entries[data.revenue[i].date].revenue = parseFloat(data.revenue[i].amount);
         } else {
            entries[data.revenue[i].date] = {'revenue' : parseFloat(data.revenue[i].amount), 'investment' : 0 };
        }
    }

}

现在,从这个entries对象,我们可以生成数组结构。

var dataAreaChart = [["Date", "Investment", "Revenue"]];
for (entry in entries) {
    dataAreaChart.push([entry, entries[entry].investment, entries[entry].revenue])
}