我的服务器端代码返回了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)]);
    }
}


任何指导,不胜感激。

最佳答案

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

因此,您可以做的是,遍历“投资”和“收入”数组,并创建数据的中间结构,从中可以生成所需的输出结构。

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

您可以使用日期作为键,并使用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])
}

10-07 12:14
查看更多