计算jQuery数组中某些分组值的有效方法

计算jQuery数组中某些分组值的有效方法,jquery,arrays,loops,grouping,Jquery,Arrays,Loops,Grouping,我有很多人。我想得到整个列表的计数,按每个级别和性别组合分组。我想将这些结果存储在单独的变量中,我可以随时按任何顺序显示这些变量 例如,获取B级男性的计数并将其存储在变量中,B级女性的计数并将其存储在变量中,B级非二进制、a级男性、a级女性和a级非二进制,等等,通过其他级别将其存储在自己的变量中。如果将它们存储在一个数组中更好(很可能是这样),那么存储的顺序应该是从A级Male,Femal,Binary到Z级Male,Femal,Binary 此外,我还想知道每个级别的总数 我使用过滤器在JSF

我有很多人。我想得到整个列表的计数,按每个级别和性别组合分组。我想将这些结果存储在单独的变量中,我可以随时按任何顺序显示这些变量

例如,获取B级男性的计数并将其存储在变量中,B级女性的计数并将其存储在变量中,B级非二进制、a级男性、a级女性和a级非二进制,等等,通过其他级别将其存储在自己的变量中。如果将它们存储在一个数组中更好(很可能是这样),那么存储的顺序应该是从A级Male,Femal,Binary到Z级Male,Femal,Binary

此外,我还想知道每个级别的总数

我使用过滤器在JSFIDLE中编写了一些东西,但我只完成了a级。执行B、C、D等级别的代码行太多了。我认为使用循环或其他方法可以缩短和更简洁。有人能帮我找到一个更有效的方法吗?


此外,这个列表最多有80人和A-H级别。如果有了这些规格,我最好将这些数据放入excel之类的电子表格中。对于一个数据库来说,这不是一个足够大的项目。如果我这样做,我将如何输出到网站?我应该在服务器端输出这些数据而不是使用jQuery吗?

使用方法可以轻松完成分组

grp将是

Object {A_F: Array[1], B_F: Array[2], A_M: Array[1], B_N: Array[1]}

不幸的是,您无法控制JS对象中的键顺序

以下是您可能想要使用的纯JS实现:

var list ={"PEOPLE": [
    {  "name": "Bob",   "level": "A",  "gender": "F"},
        {  "name": "Sue", "level": "B", "gender": "F"},
       {  "name": "Molly", "level": "A", "gender": "M"},
       {  "name": "Joe",  "level": "B", "gender": "N"},
        {  "name": "Jack", "level": "B",  "gender": "F"}
        ]};
var counts = {};
var gender = {
  F : "Female",
  M : "Male",
  N : "Neutral"
};
for(var i = 0; i < list.PEOPLE.length; i++){
  var key = list.PEOPLE[i].level + "_" + list.PEOPLE[i].gender;
  if(!counts[key]) counts[key] = 0;
  counts[key]++;
}
//try printing out the result
for(var prop in counts){
  var subKey = prop.split('_');
  var level = subKey[0];
  var gen = subKey[1];
  $('#dir2').append("Level " + level + " " + gender[gen] + 
                     ": " + counts[prop] + "<br/>");
}
var list={“人”:[
{“姓名”:“鲍勃”,“级别”:“A”,“性别”:“F”},
{“姓名”:“Sue”,“级别”:“B”,“性别”:“F”},
{“姓名”:“莫莉”,“级别”:“A”,“性别”:“M”},
{“姓名”:“乔”,“级别”:“B”,“性别”:“N”},
{“姓名”:“杰克”,“级别”:“B”,“性别”:“F”}
]};
变量计数={};
变量性别={
F:“女性”,
M:“男”,
N:“中立”
};
for(var i=0;i”;
}
如果要获得组合的计数(在级别和性别之间),只需按照以下格式构建
level\u gender
(性别的缩写)并传入
计数
,即可获得计数


如果此信息来自数据库,请提供该信息。正如您所发现的那样,自己做会很麻烦。不幸的是,这些信息不是来自数据库。对于透视图,该列表最多将有约80人,级别为A-H。谢谢!是的,谢谢你提出组合计数。我忘了我还需要每个级别的总数。
Object {A_F: Array[1], B_F: Array[2], A_M: Array[1], B_N: Array[1]}
var list ={"PEOPLE": [
    {  "name": "Bob",   "level": "A",  "gender": "F"},
        {  "name": "Sue", "level": "B", "gender": "F"},
       {  "name": "Molly", "level": "A", "gender": "M"},
       {  "name": "Joe",  "level": "B", "gender": "N"},
        {  "name": "Jack", "level": "B",  "gender": "F"}
        ]};
var counts = {};
var gender = {
  F : "Female",
  M : "Male",
  N : "Neutral"
};
for(var i = 0; i < list.PEOPLE.length; i++){
  var key = list.PEOPLE[i].level + "_" + list.PEOPLE[i].gender;
  if(!counts[key]) counts[key] = 0;
  counts[key]++;
}
//try printing out the result
for(var prop in counts){
  var subKey = prop.split('_');
  var level = subKey[0];
  var gen = subKey[1];
  $('#dir2').append("Level " + level + " " + gender[gen] + 
                     ": " + counts[prop] + "<br/>");
}