В настоящее время я работаю над проектом Node.js, используя рули в качестве моего движка шаблонов и HighCharts.js в качестве графического движка для визуализации некоторых диаграмм на стороне клиента. Я успешно ввел данные из своей базы данных и представил их в HighCharts, но мне нужно реструктурировать данные, чтобы добиться того, что я пытаюсь сделать. Я использую график столбцов с накоплением с часами дня на оси Y и датой на оси X, в любое время, когда идет дождь, на графике должен отображаться синий столбец с накоплением, если нет дождя, прозрачный столбец должен быть сложены. Грубое представление о том, о чем я говорю, можно увидеть на рисунке ниже.
столбец с накоплением
Мои данные из базы данных структурированы, как показано ниже.
{ tstamp: 2010-11-05T02:00:00.000Z,
rain: 0.2647019028663635,
rainhr: true,
latitude: 40.6875,
longitude: -86.9375,
date: '11/04/2010',
hour: '22' },
{ tstamp: 2010-11-05T03:00:00.000Z,
rain: 0.5646802186965942,
rainhr: true,
latitude: 40.6875,
longitude: -86.9375,
date: '11/04/2010',
hour: '23' },
{ tstamp: 2010-11-05T04:00:00.000Z,
rain: 0.08448517322540283,
rainhr: true,
latitude: 40.6875,
longitude: -86.9375,
date: '11/05/2010',
hour: '00' },
{ tstamp: 2010-11-05T05:00:00.000Z,
rain: 0,
rainhr: false,
latitude: 40.6875,
longitude: -86.9375,
date: '11/05/2010',
hour: '01' },
{ tstamp: 2010-11-05T06:00:00.000Z,
rain: 0,
rainhr: false,
latitude: 40.6875,
longitude: -86.9375,
date: '11/05/2010',
hour: '02' },
На стороне сервера я пытался выполнить некоторую обработку данных, чтобы отправить их на сторону клиента, готовые к использованию HighCharts.
Структура данных, которую я пытался использовать, выглядит следующим образом:
var testData = {
day: '',
hour: [],
color: []
}
dataArray = [];
Один день должен идти на каждый объект, а доступные часы и цвета (синий или прозрачный [дождь или без дождя]) должны быть в объекте testData. Как только я переберу все дневные значения (например, все значения, связанные с 05.11.2010), объект должен быть перенесен в dataArray, и я начну сначала с объекта testData в новый день. То, что я до сих пор пытался обработать, приведено ниже.
var prevDate = wxPrecipResult.recordset[0].date;
for (let i = 0; i < wxPrecipResult.recordset; i++) {
currentDate = wxPrecipResult.recordset[i].date;
testData.day = currentDate;
console.log(testData);
if (currentDate === prevDate) {
testData.hour.push(wxPrecipResult.recordset[i].hour);
if (wxPrecipResult.recordset[i].rainhr === 1) {
testData.color.push('rgba(0,0,255,1)');
} else {
testData.color.push('rgba(0,0,0,0)');
}
} else {
dataArray.push(testData);
}
prevDate = currentDate;
}
Любая помощь будет принята с благодарностью. Я все еще новичок в использовании JavaScript в таком большом проекте, до этого момента я использовал его для небольших вещей. Спасибо!