Javascript在multidimension数组中的平均值

时间:2017-02-18 13:10:49

标签: javascript multidimensional-array average

我有一个2D数组,按学生名字和各种100米冲刺课程排序。数据数组的片段可能如下所示......

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

1 个答案:

答案 0 :(得分:1)

你可以使用一个对象作为名称的哈希表,使用我们的数组作为计数和存储数据的结果集。

&#13;
&#13;
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);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;