Гистограмма во флоте - Javascript - PullRequest
0 голосов
/ 12 июля 2010

Я пытаюсь создать гистограмму в flot, где бары организованы по дням.

Я не могу найти способ объединить значения в 1 бар в день.

__

Есть идеи?

1 Ответ

4 голосов
/ 12 июля 2010

Возможно, в вашем вопросе есть что-то конкретное, и в этом случае я мог бы пропустить их.Но если вы только что получили структуру данных javascript с датами и хотите объединить их в полные дни, вы можете сделать что-то вроде этого.

Предположим, что используется следующий источник данных:

var data = [];
data.push({ value: 4, date: new Date(1278940338413) }); // july 12, 15:12:18
data.push({ value: 7, date: new Date(1278340738313) }); // july 5, 16:38:58
data.push({ value: 2, date: new Date(1278940331313) }); // july 12, 15:12:11

Затем вы можете написать функцию, подобную этой, для анализа вашей структуры данных в новом формате:

function aggregateByDate(source) {
    var aggregateHash = {};

    for(var i = 0; i < source.length; i++) {
    var item = source[i];
        var compareString = item.date.getFullYear() + '-' + (item.date.getMonth()+1) + '-' + item.date.getDate();

        if(!(compareString in aggregateHash)) {
           aggregateHash[compareString] = [];
        }

        aggregateHash[compareString].push(item);
    }

    var newSource = [];
    for(var key in aggregateHash) {

       var sum = 0;

       for(var i = 0; i < aggregateHash[key].length; i++) {
          sum += aggregateHash[key][i].value;
       }

       newSource.push({
          total: sum,
          count: aggregateHash[key].length,
          items: aggregateHash[key],
          dateString: key
       });
    }

    return newSource;
}

Это даст вам следующий результат:

/*
   INPUT:
   [
    { value: 4, date: ( july 12, 15:12:18 ) },
    { value: 7, date: ( july 5, 16:38:58 ) },
    { value: 2, date: ( july 12, 15:12:11 ) }
   ]
*/

var output = aggregateByDate(data);

/*
   OUTPUT:
   [
     { count: 2, dateString: '2010-7-12', items: Array(2), total: 6 },
     { count: 1, dateString: '2010-7-5', items: Array(1), total: 7 }
   ]
*/

Что она делаетзаключается в создании хэша с тем, что представлено в выводе как dateString для ключа, и он перебирает исходную коллекцию, чтобы заполнить этот хэш массивами для каждого ключа хеша.После этого он перебирает все ключи в хэше и создает массив объектов, содержащий результат хешированной группы.

...