Musisz łapać te dane w pętli - np. zamiast console.logować na końcu, to możesz console.logować w środku pętli. Wtedy będziesz mieć dostęp do tych danych.
Z drugiej strony wrzucanie console.log do środka pętli jest mało eleganckie, więc mogłabyś zrobić podzielić to na 2 części:
- obliczanie średniej dla wszystkich użytkowników (I zrobić np. osobną tablicę
averages
z zapisaną średnią dla każdego użytkownika)
- samo wyświetlanie wcześniej obliczonych danych (i wyświetlić każdy element tej tablicy razem z odpowiadającym nazwiskiem itp.)
I teraz. Nie musisz używać pętli for. JS ma specjalną konstrukcję do tworzenia jednej tablicy z drugiej, czyli metodę map
, która przyjmuje funkcję, która będzie wywołana dla każdego elementu i wtedy możesz zmapować każdy element np. na średnią (czyli map zamiast jednej pętli for). Z kolei żeby policzyć sumę ocen do średniej, też nie musisz robić pętli, bo masz reduce
. Czyli możesz zrobić coś takiego:
Kopiuj
const averages = student.map(s => s.grades.reduce((a, b) => a + b) / s.grades.length)
for (let i = 0; i < student.length; i++) {
console.log(student[i].name, averages[i]);
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
A do tego kodu, który już masz
Kopiuj
for (let i = 0; i < student.length; i++){
var grades = student[i]["grades"];
var ma zasięg na całą funkcję (a nie na blok), jeśli chcesz zrobić zmienną, która będzie widoczna tylko w pętli, to lepiej użyć const
albo let
. Inaczej mogą być niespodzianki.