2013-08-24 15 views
0

我試圖讓新生和二年級的平均「水平」。在這一點上,我一起添加了答案,但我不確定如何獲得僅匹配「新生」或「大二」的項目的答案總數。我使用len = gdata.length來計算數組中的項目總數,但我只需要重新計算匹配的答案。除以特定字符串出現的次數,而不是總長度(Javascript)?

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); 
}; 

回答

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。

+0

+1不知道jQuery有這個功能。 – dana

+0

好吧,所以我有點理解這是做什麼。儘管如何分別訪問大一和大二的人數?假設fsData.length等於11,佔6個大一學生和5個大二學生。我如何抓住/保存六個和五個? – user1855009

相關問題