我有一个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;
}
}
}
答案 0 :(得分: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);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;