21/30 Золотой мяч. Где лужа?

Доброго времени суток! Знаю, что правильно решить эту задачу можно всего лишь через одну функцию, с двумя циклами в теле и т.д. Но поскольку я изначально решила создать две функции, хочется так эту задачу и решить, пусть это и усложнено.
Подскажите, почему код не работает на пустом массиве и выдает null при расчете percent? Если массив заполнить, то одна проверка проходит.

var players = [];

var getGoals = function (players) {
var goalsSum = 0;
for (var i = 0; i < players.length; i++) {
goalsSum += players[i].goals;
}
return goalsSum;
}
var goalsSum = getGoals(players);

var getStatistics = function (players) {

for (var i = 0; i < players.length; i++) {
players[i].coefficient = players[i].goals * 2 + players[i].passes;
players[i].percent = Math.round(players[i].goals / goalsSum * 100);
}
return players;
};

getStatistics(players);

1 лайк

Добрый вечер!
Скорее проблема в первой строчке, вы изначально задаете пустой массив, этого делать не нужно, так как вы обнуляете массив (делаете его пустым), который программа должна подставить в вашу функцию.
Конечно, вычисления не будут работать без данных, не нужно переопределять значения исходного массива.

Когда я убираю первую строчку, выдает сообщение - Переменная players не определена. В чем еще здесь может быть ошибка?

Попробовал запустить ваш код.
Скорее, сама работа программы такова, что может передать массив только одной функции.
Как только добавляется вторая функция - выдает ошибку переменной.

Спасибо, что помогли! Значит все-таки это задание надо решать с одной функцией) буду переделывать

@Amirisa Вы почти все правильно сделали))), только вот функцию попытались вызвать не из другой функции, а посередине Вашей программы. вот эту строчку удалите: var players = [];
а вот эту: var goalsSum = getGoals(players); перенесите внутрь Вашей 2-й функции перед циклом for.

когда убираю var players = []; выдает Переменная players не определена :cry: и работать ничего не хочет

Уберите вызов 2-й функции getStatistics(players); - Вы пытаетесь вызвать 2-ю функцию не с аргументом, а с самим параметром. В этой задаче программа сама подставит параметры. В смысле, что здесь вызов функции не нужен.

1 лайк

гениально! спасибо за помощь!

1 лайк

вот так будет лучше :grin:

let getStatistics = function (players){
    let allGoals = 0;
    for(let i = 0; i<players.length; i++){
      allGoals += players[i].goals
    }
    for(let j = 0; j<players.length; j++){
      players[j].coefficient = (players[j].goals *2) + players[j].passes;
      players[j].percent = Math.round((players[j].goals * 100) / allGoals);
    }
    return players
};

1 лайк