题目
给你一个不同学生的分数列表,请按 学生的 id 顺序 返回每个学生 最高的五科 成绩的 平均分。
对于每条 items[i] 记录, items[i][0] 为学生的 id,items[i][1] 为学生的分数。平均分请采用整数除法计算。
示例
输入:[[1,91],[1,92],[2,93],[2,97],[1,60],[2,77],[1,65],[1,87],[1,100],[2,100],[2,76]]
输出:[[1,87],[2,88]]
解释:id = 1 的学生平均分为 87;id = 2 的学生平均分为 88.6。但由于整数除法的缘故,平均分会被转换为 88。
题解
const fiveHighAvg = (arr) => {
// ◆学生 id 从小到大排序,分数从大到小排序
arr.sort((a, b) => {
return a[0] === b[0] ? b[1] - a[1] : a[0] - b[0]
})
let idArr = []
let resArr = []
// ◆获取学生 id 数组
arr.forEach(item => {
idArr.push(item[0])
})
// ◆ id 去重
idArr = [...new Set(idArr)]
// ◆把 id 和 平均分 塞到二维数组里面
idArr.forEach(id => {
let scoreArr = []
let avgValue = 0
arr.forEach(it => {
if (id === it[0]) {
scoreArr.push(it[1])
}
})
avgValue = getAvg(scoreArr)
resArr.push([id, avgValue])
})
return resArr
// ◆封装平均数函数
function getAvg(scoreArr) {
let sumScore = scoreArr.slice(0, 5).reduce((sum, item) => sum += item, 0)
let avgScore = parseInt(sumScore / 5)
return avgScore
}
}
// ◆测试用例
let s1 = [[1, 91], [1, 92], [2, 93], [2, 97], [1, 60], [2, 77], [1, 65], [1, 87], [1, 100],
[2, 100], [2, 76]]
console.log(fiveHighAvg(s1));
// [ [ 1, 87 ], [ 2, 88 ] ]
let s2 = [[1, 90], [1, 90], [1, 80], [2, 80], [1, 60], [2, 75], [2, 65], [1, 99], [2, 100], [2, 87]]
console.log(fiveHighAvg(s2));
// [ [ 1, 83 ], [ 2, 81 ] ]
let s3 = [[1, 80], [1, 80], [1, 80], [2, 70], [1, 80], [2, 70], [2, 70], [1, 85], [2, 80], [2, 70]]
console.log(fiveHighAvg(s3));
// [ [ 1, 81 ], [ 2, 72 ] ]