Javascript 如何为FusionCharts重建sql数据库?

Javascript 如何为FusionCharts重建sql数据库?,javascript,arrays,fusioncharts,Javascript,Arrays,Fusioncharts,我编写了以下代码来重新格式化我的sql数据,使其适合于fusion图表可读的格式。现在我已经“试探过了”,并返回了正确的格式,我显然走了很长的路。从数据库重建的优雅、高效/合适的方法是什么 var chartData = { chart: {}, categories: [], dataset: [] }; var category = []; var dataseries1 = []; var dataseries2 = []; var dataseries3 = [

我编写了以下代码来重新格式化我的sql数据,使其适合于fusion图表可读的格式。现在我已经“试探过了”,并返回了正确的格式,我显然走了很长的路。从数据库重建的优雅、高效/合适的方法是什么

var chartData = {
    chart: {},
    categories: [],
    dataset: []
};

var category = [];
var dataseries1 = [];
var dataseries2 = [];
var dataseries3 = [];

connection.connect();

connection.query('SELECT * from garage', function(error, results, fields) {
    if (error) throw error;

    for (var i = 0, len = results.length; i < len; i++) {
        category.push({
            label: results[i].date
        });
        dataseries1.push({
            value: results[i].humidity
        });
        dataseries2.push({
            value: results[i].temperature
        });
        dataseries3.push({
            value: results[i].absolute_humidity
        });
    }

    chartData.categories.push({
        category: category
    });

    chartData.dataset.push({
        seriesname: 'Humidity',
        data: dataseries1
    });
    chartData.dataset.push({
        seriesname: 'Temperature',
        data: dataseries2
    });
    chartData.dataset.push({
        seriesname: 'Absolute Humidity',
        data: dataseries3
    });

    console.log(chartData);

});

您的代码太忙了,无法将数据从一个临时位置移动到另一个临时位置。这就是我要做的

助手函数(这已经包含在许多JS工具带库中,如lodash中):

用法:

connection.connect();
connection.query('SELECT * from garage', function (err, results) {
    if (err) throw err;

    var chart = new FusionCharts({
        // ...
        dataSource: {
            categories: pluck('date', results),
            dataset: [
                { seriesname: 'Humidity', data: pluck('humidity', results) },
                { seriesname: 'Temperature', data: pluck('temperature', results) },
                { seriesname: 'Absolute Humidity', data: pluck('absolute_humidity', results) }
            ]
        }
    });
    chart.render();
});

如果需要,可以按如下方式重写
pulk
帮助程序

var pluck = (property, items) => items.map(item => item[property]);

取决于-您的数据库是否理解JSON-它是否可以以本机方式返回JSON?你认为你做这件事的方式有什么特别糟糕的地方?你使用什么数据库?如果您使用MongoDB,您只能使用mariadb获得jsonIm,则需要重新构建以适应fusion charts格式,以便将数据传送到图表中,就像将数组中的“湿度”重命名为“值”一样,数组中不能包含3个名为value的单独值。您可以使用JPA将结果转换为POJO,然后使用Jackson将结果序列化为JSON。不确定这是否是最有效的方法,但似乎相当优雅。。。可能不值得只为一两个查询付出努力…为什么还要转换为JSON呢?您似乎可以直接访问数据库,将结果转换为JSON是没有用的。直接显示它们有什么不对?这就是我要找的有趣的例子。我知道我的代码非常“小步探听”。我会仔细查看以理解它,我在复制/粘贴意外标识符“dataset”时抛出了一个错误。我的坏消息是,忘记了一个逗号。我也添加了它,在清理我的代码网时删除了其他内容。很好的例子,不难理解+1这类活动通常称为“按摩数据”,或者更正式地称为“转换”或“映射”。
connection.connect();
connection.query('SELECT * from garage', function (err, results) {
    if (err) throw err;

    var chart = new FusionCharts({
        // ...
        dataSource: {
            categories: pluck('date', results),
            dataset: [
                { seriesname: 'Humidity', data: pluck('humidity', results) },
                { seriesname: 'Temperature', data: pluck('temperature', results) },
                { seriesname: 'Absolute Humidity', data: pluck('absolute_humidity', results) }
            ]
        }
    });
    chart.render();
});
var pluck = (property, items) => items.map(item => item[property]);