Oi, Alceu
Você pode usar "map" e "reduce", mas não me parece mais elegante
const notas1 = [10, 6.5, 8, 7.5]
const notas2 = [9, 6, 6]
const notas3 = [8.5, 9.5]
const notasGerais = [notas1, notas2, notas3]
const arrayMedias = notasGerais.map((notas, i) => notas.reduce((total, valor) => total += valor) / notasGerais[i].length);
let mediaGeral = arrayMedias.reduce((total, valor) => total += valor) / notasGerais.length;
console.log('Array das médias:',arrayMedias);
// Array das médias: (3)[ 8,7,9 ]
console.log('Média Geral:', mediaGeral);
// Média Geral: 8
Em uma linha:
// acho que fica confuso
let mediaGeral = notasGerais.map((notas,i) => notas.reduce((total, valor) => total + valor) / notasGerais[i].length).reduce((total, valor) => total + valor) / notasGerais.length
console.log('Média Geral:', mediaGeral);
// Média Geral: 8
Veja mais em: Manipulação de array com map, filter e reduce/