如何基于Geo维度统计JSON数据中LeadStage的数量
解决方案:按Geo维度分组统计LeadStage数量
看起来你已经有了全局统计的基础,现在只需要调整分组的维度,把Geo和LeadStage的组合作为统计的核心,之后再转换成你需要的数组格式就行。我帮你修改了代码,直接就能得到想要的结果:
var data = { "leads":{ "data":[ { "UserName":"Tharun Sairam", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Tharun Sairam", "Geo":"US East", "LeadStage":"MGL" }, { "UserName":"Praveen Kumar", "Geo":"US West", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Denisse Morales", "Geo":"NSU", "LeadStage":"MGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Anthony Susairaj", "Geo":"US West", "LeadStage":"RGL" }, { "UserName":"Vivek Sharma", "Geo":"NSU", "LeadStage":"SGL" }, { "UserName":"Souvik bhattacharya", "Geo":"US East", "LeadStage":"SGL" }, { "UserName":"Arvind Partha", "Geo":"US West", "LeadStage":"SGL" }, { "UserName":"Kaviarasan Selvaraj", "Geo":"NSU", "LeadStage":"SGL" }, { "UserName":"Tharun Sairam", "Geo":"US East", "LeadStage":"MGL" } ] } }; // 修改分组函数:同时按Geo和LeadStage嵌套分组统计 function groupByGeoAndLeadStage(arr) { var groupBy = {}; $.each(arr, function () { // 先确保当前Geo的分组容器存在 if (!groupBy[this.Geo]) { groupBy[this.Geo] = {}; } // 再统计该Geo下对应LeadStage的数量 groupBy[this.Geo][this.LeadStage] = 1 + (groupBy[this.Geo][this.LeadStage] || 0); }); return groupBy; } // 修改转换函数:把嵌套分组结构转换成目标数组格式 function createGeoLeadStageArray(obj) { var arr = []; // 遍历每个Geo分组 Object.keys(obj).forEach(function(geo) { // 遍历当前Geo下的所有LeadStage统计项 Object.keys(obj[geo]).forEach(function(leadStage) { arr.push({ Geo: geo, LeadStage: leadStage, count: obj[geo][leadStage] }); }); }); return arr; } var resObj = groupByGeoAndLeadStage(data.leads.data); var resArray = createGeoLeadStageArray(resObj); console.log(resArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
代码说明:
- groupByGeoAndLeadStage函数:不再只按LeadStage全局统计,而是先以Geo为一级分组,每个Geo下再按LeadStage统计数量,形成
{ "US East": { "SGL": 6, "MGL": 2 }, ... }这样的嵌套结构,确保统计维度准确。 - createGeoLeadStageArray函数:遍历嵌套结构的每一层,把每个「Geo+LeadStage」的组合转换成你需要的对象格式,最终得到包含所有统计条目的数组。
运行这段代码后,控制台会输出你期望的格式示例:
[ { Geo: "US East", LeadStage: "SGL", count: 6 }, { Geo: "US East", LeadStage: "MGL", count: 2 }, { Geo: "US West", LeadStage: "SGL", count: 2 }, { Geo: "US West", LeadStage: "RGL", count: 1 }, { Geo: "NSU", LeadStage: "MGL", count: 1 }, { Geo: "NSU", LeadStage: "SGL", count: 2 } ]
如果你不想依赖jQuery,也可以把$.each换成原生JS的forEach,效果完全一致:
// 原生JS版本的分组函数 function groupByGeoAndLeadStage(arr) { var groupBy = {}; arr.forEach(function(item) { if (!groupBy[item.Geo]) { groupBy[item.Geo] = {}; } groupBy[item.Geo][item.LeadStage] = 1 + (groupBy[item.Geo][item.LeadStage] || 0); }); return groupBy; }
内容的提问来源于stack exchange,提问作者user3386779
相关产品推荐
相关产品推荐

