如何用JS处理JSON数据实现MySQL COUNT AS、GROUP BY的等效统计?
在JavaScript中统计JSON数组的唯一子类别数量
当然可以呀!完全不用在MySQL层面做过滤统计,只要拿到全表数据转成的JSON数组,用JavaScript就能轻松实现和你那条SELECT subcategory, COUNT(*) AS subcate FROM database GROUP BY subcategory查询一模一样的效果~
具体实现步骤
假设你已经从后端拿到了解析后的JSON对象数组(如果是字符串格式,先用JSON.parse()解析),我们可以用JS的reduce方法来高效统计:
// 示例JSON数据(解析后的JS数组) const productData = [ {"category":"fish","subcategory":"angel","name":"angelfish juvenille"}, {"category":"fish","subcategory":"angel","name":"angelfish adult"}, {"category":"fish","subcategory":"clownfish","name":"clownfish juvenille"}, {"category":"fish","subcategory":"clownfish","name":"clownfish adult"} ]; // 第一步:用reduce统计每个subcategory的出现次数 const subcateCountMap = productData.reduce((accumulator, currentItem) => { // 如果当前子类别已存在,计数+1;否则初始化为1 accumulator[currentItem.subcategory] = (accumulator[currentItem.subcategory] || 0) + 1; return accumulator; }, {}); // 初始值是空对象,用来存键值对:子类别->数量 // 第二步:把统计结果转换成和SQL输出一致的JSON数组格式 const finalResult = Object.entries(subcateCountMap).map(([subcategory, subcate]) => ({ subcategory, subcate })); // 查看结果 console.log(finalResult); // 如果需要转成JSON字符串返回,用JSON.stringify(finalResult)
输出结果
运行上面的代码后,你会得到和SQL查询完全匹配的结果:
[ { subcategory: "angel", subcate: 2 }, { subcategory: "clownfish", subcate: 2 } ]
补充说明
- 这种方式把数据统计逻辑放在前端(或Node.js后端),不需要额外发起数据库请求,适合中小数据量的场景;
- 如果数据量极大,数据库层面的
GROUP BY会更高效,但常规业务场景下JS处理完全够用; - 代码逻辑很灵活,要是后续需要统计其他字段(比如
category),只要修改currentItem的属性名就行。
内容的提问来源于stack exchange,提问作者Güney Saramalı
相关产品推荐
相关产品推荐

