如何加入 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, ]
....
]
换言之:
- 如果两个数据集都有相同日期的数据。他们进入单个阵列。
- 如果数据集没有日期值。它将为零。
到目前为止,我想出了下面的代码。这不是我想要的。将有一个值始终为 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' 数组并创建数据的中间结构,您可以从中生成所需的输出结构。
我假设日期在各自的数组中是唯一的。
您可以创建一个以日期为键并以 investment
和 revenue
作为其属性的新对象。
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])
}
我的服务器端代码 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, ]
....
]
换言之:
- 如果两个数据集都有相同日期的数据。他们进入单个阵列。
- 如果数据集没有日期值。它将为零。
到目前为止,我想出了下面的代码。这不是我想要的。将有一个值始终为 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' 数组并创建数据的中间结构,您可以从中生成所需的输出结构。
我假设日期在各自的数组中是唯一的。
您可以创建一个以日期为键并以 investment
和 revenue
作为其属性的新对象。
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])
}