Jquery 使用Linq.js对JSON数据的多个字段进行求和和和分组
我有一个JSON数据,我需要分组并求和数据。假设我有一个json对象,如下所示:Jquery 使用Linq.js对JSON数据的多个字段进行求和和和分组,jquery,json,linq.js,Jquery,Json,Linq.js,我有一个JSON数据,我需要分组并求和数据。假设我有一个json对象,如下所示: var dataString='[{"Company":"ABC","Focus":"Operate","Completed":"50","Remaining":"25"},{"Company":"ABC","Focus":"Operate","Completed":"20","Remaining":"50"},{"Company":"DEF","Focus":"Optimize","Completed":"100
var dataString='[{"Company":"ABC","Focus":"Operate","Completed":"50","Remaining":"25"},{"Company":"ABC","Focus":"Operate","Completed":"20","Remaining":"50"},{"Company":"DEF","Focus":"Optimize","Completed":"100","Remaining":"75"},{"Company":"XYZ","Focus":"Innovate","Completed":"100","Remaining":"75"},{"Company":"ABC","Focus":"Improve","Completed":"50","Remaining":"50"},{"Company":"ABC","Focus":"Optimize","Completed":"50","Remaining":"25"},{"Company":"DEF","Focus":"Operate","Completed":"50","Remaining":"25"},{"Company":"ABC","Focus":"Improve","Completed":"50","Remaining":"25"},{"Company":"XYZ","Focus":"Operate","Completed":"50","Remaining":"25"},{"Company":"XYZ","Focus":"Operate","Completed":"50","Remaining":"25"},{"Company":"XYZ","Focus":"Optimize","Completed":"20","Remaining":"50"}]';
数组在一个数组中,第一个数组应该包含公司,在另一个数组中应该包含我的焦点区域中已完成和剩余数据的总和
Company:
1. ABC --Focus -- 1.Operate -- Completed :70 ,Remaining:75
2.Improve -- Completed:100 ,Remaining:75
3.Optimize -- Completed:50 ,Remaining:25
2. DEF--Focus-- 1.Operate -- Completed:50 ,Remaining:25
2.Optimize -- Completed:100 ,Remaining:75
3. XYZ--Focus-- 1.Innovate -- Completed:100 ,Remaining:75
2.Operate -- Completed:100 ,Remaining:50
3.Optimize -- Completed:20 ,Remaining:50
我尝试了以下查询来实现这一点:
var resultxyz = Enumerable.From(dataString).GroupBy("$.Company", null,
function (key, g) {
var resultxyz = {
z: key,
totalCompleted: g.Sum("$.Completed"),
totalRemaining: g.Sum("$.Remaining")
}
return resultxyz ;
}).ToArray();
但这只是对公司进行分组,我也必须关注焦点。
任何想法或建议都会大有裨益。基本上,您正在寻找一个双层分组。首先,对所有公司进行总体分组,在每个分组中,对焦点进行分组。有许多不同的建模方法,但最直接的方法是:
var query = Enumerable.From(data)
.GroupBy("$.Company", null,
function (key, g) {
return {
Company: key,
Result: Enumerable.From(g)
.GroupBy("$.Focus", null,
"{ Focus: $, Completed: $$.Sum('Number($.Completed)'), Remaining: $$.Sum('Number($.Remaining)') }"
)
.ToArray()
};
}
)
.ToArray();
注意
Number()
函数的使用。由于已完成的
和剩余的
属性都是字符串,因此求和不会像预期的那样有效。我们需要事先将它们转换成数字。非常感谢杰夫,这正是我想要的:):)