2017-02-18 133 views
-1

我有一個二維數組,按照學生的姓名和他們各種100米衝刺課程排序。數據陣列的一個片段可能看起來像這樣...多維數組中的Javascript平均值

Names     Time(s) 

ANDREWMICHEALSMITH 13.95 
JOHNJAMESPETERSON  13.70 
JOHNJAMESPETERSON  13.80 
JOHNJAMESPETERSON  12.50 
PETERMICHEALHEWITT 12.80 
PETERMICHEALHEWITT 12.60 
VICENTJAMESSMITH  13.10 
VICENTJAMESSMITH  13.50 
VICENTJAMESSMITH  13.80 
VICENTJAMESSMITH  13.00 

我拼命需要錶轉換成顯示學生姓名,他們的平均時間和定時會話的數量,理想的結果按以下...

Names     Avg Time(s) Sessions 

ANDREWMICHEALSMITH 13.95  1 
JOHNJAMESPETERSON  13.33  3 
PETERMICHEALHEWITT 12.70  2 
VICENTJAMESSMITH  13.35  4 

我已經起草了一段JavaScript代碼,至今不幸在第一次if語句失敗。

無法從undefined讀取屬性「0」。

該代碼還沒有捕獲第n個會話的學生,也沒有規定會話的數量。坦率地說,我的Java知識對於手頭的任務非常有限。我迫切需要一些幫助來達到最終結果。

我真的很感謝任何指導。

StudentList.sort(); 

    for (var i=0; i<StudentList.length; i++){ 

    if(StudentList[i][0] == StudentList[i+1][0]){ 
     if(StudentList[i+1][0] == StudentList[i+2][0]){ 
     if(StudentList[i+2][0] == StudentList[i+3][0]){ 
      if(StudentList[i+3][0] == StudentList[i+4][0]){ 
      StudentList[i][1] = (StudentList[i][1]+StudentList[i+1][1]+StudentList[i+2][1]+StudentList[i+3][1]+StudentList[i+4][1])/5; 
      StudentList.splice(i+1,3); 
      }else{   
      StudentList[i][1] = (StudentList[i][1]+StudentList[i+1][1]+StudentList[i+2][1]+StudentList[i+3][1])/4; 
      } 
     }else{ 
      StudentList[i][1] = (StudentList[i][1]+StudentList[i+1][1]+StudentList[i+2][1])/3; 
     } 
     }else{ 
     StudentList[i][1] = (StudentList[i][1]+StudentList[i+1][1])/2; 
     } 
    } 
    } 
+6

哪裏是你的陣列? –

回答

1

您可以使用一個對象作爲哈希表的名稱,我們可以使用數組作爲結果集來計數和存儲數據。

var studentList = [['ANDREWMICHEALSMITH', 13.95], ['VICENTJAMESSMITH', 13.00], ['PETERMICHEALHEWITT', 12.80], ['PETERMICHEALHEWITT', 12.60], ['VICENTJAMESSMITH', 13.10], ['JOHNJAMESPETERSON', 13.70], ['JOHNJAMESPETERSON', 12.50], ['VICENTJAMESSMITH', 13.50], ['JOHNJAMESPETERSON', 13.80], ['VICENTJAMESSMITH', 13.80]], 
 
    hash = Object.create(null), 
 
    result = [], 
 
    array; 
 

 
studentList.forEach(function (a) { 
 
    if (!hash[a[0]]) { 
 
     hash[a[0]] = { name: a[0], sum: 0, count: 0, avg: 0 }; 
 
     result.push(hash[a[0]]); 
 
    } 
 
    hash[a[0]].sum += a[1]; 
 
    hash[a[0]].count++; 
 
    hash[a[0]].avg = (hash[a[0]].sum/hash[a[0]].count).toFixed(2); 
 
}); 
 

 
array = result.map(function (a) { 
 
    return [a.name, a.avg, a.count]; 
 
}); 
 

 
console.log(array); 
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

非常感謝你的完美演繹,儘管我一直在摸索着每一行的含義。我本來無法自己想出這個。 – user1488934

+0

請原諒我的無知,但我該如何從「結果」,一個對象表(?)表,到一個像「studentList」這樣的普通數組?所以我可以將數據寫回電子表格。謝謝。 – user1488934

+0

您可以使用['Array#map'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)並將值呈現給數組。 –