我有一群人。我想得到按每个级别和性别组合分组的整个列表的计数。我想将这些结果存储在我可以按任何顺序显示的单独变量中。
例如,获取B级男性的计数并将其存储在变量中,B级女性并将其存储在变量中,B级非二元,A级男性,A级女性和A级非二元,等等通过其他级别存储它们自己的变量。如果将它们存储在数组中是更好的(可能是),存储的顺序应该是A级男性,女性,二进制,直到Z男性,女性,二进制。
另外,我也希望每个级别的总数。
我在jsfiddle中使用过滤器写了一些东西,但我只做了A级。这将是太多的代码行做B级,C级,D级等。我认为它可以更短,清洁使用循环或东西。任何人都可以帮我找到更有效的方法吗? http://jsfiddle.net/cM94j/2/
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"}
]};
此外,这个名单最多只有80人和A-H级。与这些规格相关,我最好将这些数据放入某种类似excel的电子表格中。对于数据库来说,这不是一个足够大的项目。如果我去那条路线,我将如何输出到网站?我应该输出这些服务器端而不是使用jQuery吗?
答案 0 :(得分:2)
以下是您可能想要使用的纯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/>");
}
如果您想获得组合的计数(在级别和性别之间),只需使用以下格式构建key
:level_gender
(性别的缩写)并传入{{1获得计数。
答案 1 :(得分:0)
var grp=_.groupBy(list.PEOPLE, function(person){ return person.level+'_'+person.gender });
grp将是
Object {A_F: Array[1], B_F: Array[2], A_M: Array[1], B_N: Array[1]}
遗憾的是,您无法控制JS对象中的键顺序。