gpt4 book ai didi

JSON 数据的 JavaScript SUM 和 GROUP BY

转载 作者:IT老高 更新时间:2023-10-28 12:55:57 26 4
gpt4 key购买 nike

这是我第一次尝试使用一些 JSON 数据对象执行 JavaScript,需要一些关于实现目标的正确方法的建议。

一些服务器端代码实际上会生成一个 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 或其他一些小型库。

我只是不知道用最少的代码来处理查询是最好的、最简单的、最小的。

有什么建议吗?

最佳答案

您可以使用原生函数.reduce() 聚合数据,然后使用.sort()bytes 排序。

var result = dataObject.reduce(function(res, obj) {
if (!(obj.category in res))
res.__array.push(res[obj.category] = obj);
else {
res[obj.category].hits += obj.hits;
res[obj.category].bytes += obj.bytes;
}
return res;
}, {__array:[]}).__array
.sort(function(a,b) { return b.bytes - a.bytes; });

如果您支持较旧的实现,则需要使用 shim for .reduce() .

关于JSON 数据的 JavaScript SUM 和 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com