Объекты 21/30 - как сделать через 1 цикл

Добрый день, задачу решил, но используя 2 цикла и что-то мне подсказывает, что можно было сделать проще, но как - не могу сообразить, подскажите, как сделать через 1 цикл?

var players = []; /Создаем пустой массив, в который будут подаваться внешние данные/
var getStatistics = function (players) {

var sumGoals = 0; /Тут будет сумма голов/

/Пробегаем по всем элементам массива/
for(var i=0;i<players.length;i++){

/Добавляем в каждый элемент свойство с коэффициентом/
players[i].coefficient = players[i].goals*2+players[i].passes;

/Добавляем в переменную голы каждого футболиста/
sumGoals += players[i].goals;
};

/Теперь, когда у нас есть общее количество голов, мы можем высчитать процент и опять через цикл добавить каждому элементу массива свойство percent/
for(var i=0;i<players.length;i++){
players[i].percent = Math.round((players[i].goals * 100) / sumGoals);
};

return players; /Возвращаем обратно массив/
};
getStatistics(players);

/* Техническое задание

Мяу! Мне нужна программа, которая подсчитает полезность и результативность игроков на основе их статистики. Оформи код в виде функции getStatistics с одним параметром — массивом игроков.

Каждый футболист в этом массиве описывается объектом с тремя полями: имя (свойство name), забитые голы (свойство goals) и голевые пасы (свойство passes).

Функция должна возвращать этот же массив, в котором каждому игроку добавлены ещё два поля: коэффициент полезности по Кексу® (свойство coefficient) и результативность (свойство percent).

Коэффициент полезности считается так: умножаем голы игрока на 2 (потому что я считаю, что голы важнее всего) и прибавляем к этому значению все голевые пасы футболиста.

Результативность (процент забитых мячей футболиста от результата всей команды) считаем так: находим сумму голов всех игроков и выясняем, сколько процентов от этого числа забил каждый футболист. Округляй значение с помощью Math.round().

*/