Это моя первая попытка сделать JavaScript с некоторыми объектами данных JSON и вам нужен совет по правильному пути достижения моей цели.
Некоторые серверные коды на самом деле генерируют форматированную строку JSON, с которой я должен работать, и присваиваем ей строку:
var dataString='$DATASTRING$';
Но конечный результат, с которым я должен работать после того, как сервер заменит его данные (без\r\n, конечно):
var dataString='[
{ "category" : "Search Engines", "hits" : 5, "bytes" : 50189 },
{ "category" : "Content Server", "hits" : 1, "bytes" : 17308 },
{ "category" : "Content Server", "hits" : 1, "bytes" : 47412 },
{ "category" : "Search Engines", "hits" : 1, "bytes" : 7601 },
{ "category" : "Business", "hits" : 1, "bytes" : 2847 },
{ "category" : "Content Server", "hits" : 1, "bytes" : 24210 },
{ "category" : "Internet Services", "hits" : 1, "bytes" : 3690 },
{ "category" : "Search Engines", "hits" : 6, "bytes" : 613036 },
{ "category" : "Search Engines", "hits" : 1, "bytes" : 2858 }
]';
И затем я могу изменить его на объект, с которым можно работать.
var dataObject=eval("("+dataString+")");
Это позволяет мне получить доступ к данным отдельных строк данных, но мне нужно суммировать, группировать и упорядочивать значения.
Мне нужен эквивалент оператора SQL, например:
SELECT category, sum(hits), sum(bytes)
FROM dataObject
GROUP BY category
ORDER BY sum(bytes) DESC
Мой желаемый результат будет таким объектом, который я могу обработать следующим образом:
var aggregatedObject='[
{ "category" : "Search Engines", "hits" : 13, "bytes" : 673684 },
{ "category" : "Content Server", "hits" : 3, "bytes" : 88930 },
{ "category" : "Internet Services", "hits" : 1, "bytes" : 3690 },
{ "category" : "Business", "hits" : 1, "bytes" : 2847 }
]';
... но я не знаю, с чего начать.
Я мог бы перебирать все значения категорий и сначала находить уникальные категории, затем снова зацикливать и суммировать образы и байты, а затем сортировать, но кажется, что это должен быть более простой способ.
prototype.js(1.7) уже включен на клиентскую страницу, но я мог бы добавить Underscore, jQuery или другую небольшую библиотеку, если бы мне пришлось.
Я просто не знаю, что было бы лучше всего, проще всего, наименьшим с наименьшим количеством кода для обработки запроса.
Любые предложения?