仅除以特定字符串出现的次数,而不是总长度(Javascript)?

时间:2013-08-24 19:20:47

标签: javascript arrays switch-statement

我正在努力获得新生和大二学生的平均“水平”。此时我已将答案添加到一起,但我不确定如何仅为匹配“新生”或“二年级”的项目获得答案总数。我使用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);
};

1 个答案:

答案 0 :(得分:2)

您可以先使用jQuery.grep过滤数组。 enter link description here

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。