我的服务器端代码返回一个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, ]
....
]
用文字说明:
到目前为止,我想出了下面的代码。这不是我想要的。将有重复日期,其中一个值始终为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)]);
}
}
非常感谢任何指导。
答案 0 :(得分:1)
我不确定是否可以直接使用给定结构中的数据。
所以,你可以做的是,重复投资&#39;和&#39;收入&#39;数组并创建数据的中间结构,从中可以生成所需的输出结构。
我假设日期在各个数组中都是唯一的。
您可以使用日期作为键创建一个新对象,并将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])
}