如何为 FusionCharts 重建 sql 数据库?
How to rebuild an sql database for FusionCharts?
我写了以下内容来重新格式化我的 sql 数据以适应融合图表可读格式。既然我已经 'sounded it out' 并且正在返回正确的格式,我显然要走很长的路。从数据库重建的优雅或 efficient/proper 方法是什么?
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);
});
编辑:返回的格式是
{ chart: {},
categories: [ { category: [Array] } ],
dataset:
[ { seriesname: 'Humidity', data: [Array] },
{ seriesname: 'Temperature', data: [Array] },
{ seriesname: 'Absolute Humidity', data: [Array] } ] }
您的代码忙于将数据从一个临时位置移动到另一个位置。这是我会做的。
Helper 函数(这已经包含在许多 JS 工具带库中,例如 lodash):
function pluck(property, items) {
return items.map(function (item) { return item[property]; });
}
用法:
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();
});
当你有 ES6 arrow-function support 时,pluck
助手可以重写如下,如果你愿意的话。
var pluck = (property, items) => items.map(item => item[property]);
我写了以下内容来重新格式化我的 sql 数据以适应融合图表可读格式。既然我已经 'sounded it out' 并且正在返回正确的格式,我显然要走很长的路。从数据库重建的优雅或 efficient/proper 方法是什么?
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);
});
编辑:返回的格式是
{ chart: {},
categories: [ { category: [Array] } ],
dataset:
[ { seriesname: 'Humidity', data: [Array] },
{ seriesname: 'Temperature', data: [Array] },
{ seriesname: 'Absolute Humidity', data: [Array] } ] }
您的代码忙于将数据从一个临时位置移动到另一个位置。这是我会做的。
Helper 函数(这已经包含在许多 JS 工具带库中,例如 lodash):
function pluck(property, items) {
return items.map(function (item) { return item[property]; });
}
用法:
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();
});
当你有 ES6 arrow-function support 时,pluck
助手可以重写如下,如果你愿意的话。
var pluck = (property, items) => items.map(item => item[property]);