如何加入 Google 面积图的两个数据集

How to Join Two data sets for Google area chart

我的服务器端代码 returns 一个 json 格式的响应,我需要在 google 面积图上显示。看起来像这样。

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. 如果数据集没有日期值。它将为零。

到目前为止,我想出了下面的代码。这不是我想要的。将有一个值始终为 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)]);
    }
}

非常感谢任何指导。

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

因此,您可以做的是遍历 'investment' 和 'revenue' 数组并创建数据的中间结构,您可以从中生成所需的输出结构。

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

您可以创建一个以日期为键并以 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])
}