21/30 Золотой мяч. Объясните пожалуйста.

Объясните почему нельзя решить задачу таким образом (указано ниже)?
Вроде логика та же как у верного решения
Сначала функция которая считает сумму.
После вычисляем проценты и коэффициент.
И добавляем в массив текущему игроку с помощью Push.

И если есть возможность такого решения подскажите где ошибка.
TypeError: players is undefined

let sumGoals = function (players) {
 let sum = 0;
  for (let i = 0; i < players.length; i++) {
    let currentPlayer = players[i];
    sum += currentPlayer.goals;
    };
  return sum;
  }

let getStatistics = function (players) {

for (let i = 0; i < players.length; i++) {
  let currentPlayer = players[i];
  let coefficient = currentPlayer.goals * 2 + currentPlayer.passes;
  let percent = Math.round((currentPlayer.goals * 100) / sumGoals());
  currentPlayer.push(coefficient, percent);
  }

return players;
};

Для проверки программа вызывает функцию getStatistics (как указано в задании), у Вас в данной функции применяется результат первой функции sumGoals, которую Вы вызываете без входного параметра sumGoals(), в данном случае нужно было задать массив players → sumGoals(players).
А также Вы неверное использовали push. Запись в объект происходит по другому (см. Конспект «Объекты». Раздел 1).

1 лайк

про sumGoals спасибо, понял.

про push не совсем. Почитал еще документацию. .push.apply() для слияния массивов. Просто .push() для добавления элементов в массив (строк, чисел) Правильно понял?
а тут просто нужно через += добавлять в currentPlayer.

В объект просто через = добавляем.

А что касаемо push(), то да, все так, для добавления в массив.

1 лайк

let player = {
name: ‘’,
goals: 0,
passes: 0
};

let getStatistics = function (players) {
let team = [];
let sumGoals = 0;
for (let i = 0; i < players.length; i++) {
sumGoals += players[i].goals;
}
for (let i = 0; i < players.length; i++) {

players[i].coefficient = players[i].goals * 2 + players[i].passes;
 
players[i].percent = Math.round(players[i].goals / sumGoals * 100);
 
team.push(players[i]); 

}
return team;
};