0

我正在尝试获得大一和大二学生的平均“水平”。此时我已将答案加在一起,但我不确定如何仅获得匹配“大一”或“大二”的项目的答案总数。我使用 len = gdata.length 来计算数组中的项目总数,但我只需要重新计算匹配的答案。

var len = gdata.length;
    var sum = 0;
    var sumF = 0;
    var sumSo = 0;
    var average = 0;
    var avgF = 0;
    var avgSo = 0;

$.each(gdata, function (i, gdata){

            var date = gdata.Timestamp;
    var level = gdata.level;
    var year = gdata.year;
            sum+=parseInt(level) || 0;
            average = sum/len;


    switch(year) {
      case 'Freshman':
        sumF+=parseInt(level) || 0;
        console.log(sumF);
        avgF = sumF/len;
        break;

      case 'Sophomore':
        sumSo+=parseInt(level) || 0;
        console.log(sumSo);
        avgSo = sumSo/len;
        break;

      default:
        console.log("");
    }

});
    console.log(sum);
    console.log(average);
};
4

1 回答 1

2

您可以先使用 jQuery.grep 过滤数组。 在此处输入链接描述

var fsData = $.grep(gdata, function (n, i) {
    return n.year == "Freshman" || n.year == "Sophomore";
});

那么 fsData.length 将是大一和大二学生的总数。然后您的每个语句可以调整为:

$.each(fsData, function (i, data) {
    // blah blah
});

编辑:

如果你想把大一和大二分开,你可以这样做:

var freshman = [];
var sophomores = [];
var freshman_and_sophomores = [];

$.each(gdata, function (i, v) {
    if (v.year == "Freshman" || v.year == "Sophomore") {
        freshman_and_sophomores.push(v);
        if (v.year == "Freshman") freshman.push(v);
        if (v.year == "Sophomore") sophomores.push(v);
    }
});

现在你可以获取freshman.length 和sophomores.length。然后在你的下一个 $.each 中使用freshman_and_sophomores。

于 2013-08-24T19:30:12.013 回答