Объекты 18/30

Почему-то kod не работает na praverke и неправильна показывает значение percentage

в чем проблема?

let playerOne = {
  name: 'Васька',
  goals: 5,
  passes: 5 
}
let playerTwo = {
  name: 'Байт',
  goals: 12,
  passes: 2 
}
let playerThree = {
  name: 'Снежок',
  goals: 2,
  passes: 7 
}
let players = [playerOne, playerTwo, playerThree];
let goalsTotal = 0;

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

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

getStatistics(players);

Первым делом вам нужно посчитать сумму голов всех игроков. Для этого действия нам не нужно создавать отдельную функцию, мы можем обойтись одним циклом. Этот цикл будет на каждой итерации — витке — цикла прибавлять голы каждого игрока к общей сумме, а затем записывать это число в переменную goalsTotal . Не забудем объявить эту переменную до цикла. Код будет выглядеть так:

let goalsTotal = 0;

for(let i=0; i<players.length; i++){

goalsTotal += players[i].goals;

}

Так как нам нужно считать количество игроков каждый раз, когда мы вызываем функцию getStatistics разумно будет перенести цикл для подсчёта общего количества голов внутрь этой функции. На этом этапе наш код будет выглядеть так:

let playerOne = {

name: 'Васька',

goals: 5,

passes: 5

}

let playerTwo = {

name: 'Байт',

goals: 12,

passes: 2

}

let playerThree = {

name: 'Снежок',

goals: 2,

passes: 7

}

let players = [playerOne, playerTwo, playerThree];

let getStatistics = function (players) {

let goalsTotal = 0;

for(let i=0; i<players.length; i++){

goalsTotal += players[i].goals;

}

}

Затем нам нужно посчитать результативность и коэффициент полезности каждого игрока. Вы совершенно верно используете ещё один цикл. Только внутри второго цикла лучше объявить другую переменную-счётчик, не i, а j: for (let j=0; j<players.length; j++)

Теперь давайте посмотрим, что происходит внутри второго цикла. Вы совершенно верно считаете коэффициент полезности. Но в формулу подсчёта результативности закралась ошибка. Чтобы посчитать проценты, нам необходимо использовать другую схему, а именно:

let percentage = Math.round((players[i].goals * 100) / goalsTotal);

, где вы сначала умножаете количество забитых голов одного игрока, а затем делите полученный результат на общее количество голов, забитых во время матча.

На следующем шаге вы записываете два новых свойства в текущий элемент массива players , то есть каждому игроку. Со свойством coefficient вы всё делаете верно, но потом пытаетесь записать в массив свойство percentage , хотя по заданию от вас требуется (цитата): «… каждому игроку добавлены … результативность (свойство percent)». Поэтому от вас ожидается такая строка: players[i].percent = percentage; .

В «собранном» состоянии ваш код должен выглядеть так:

let playerOne = {

name: 'Васька',

goals: 5,

passes: 5

}

let playerTwo = {

name: 'Байт',

goals: 12,

passes: 2

}

let playerThree = {

name: 'Снежок',

goals: 2,

passes: 7

}

let players = [playerOne, playerTwo, playerThree];

let getStatistics = function (players) {

let goalsTotal = 0;

for(let i=0; i<players.length; i++){

goalsTotal += players[i].goals;

}

for(let j=0; j<players.length; j++){

let coefficient = players[j].goals * 2 + players[j].passes;

let percentage = Math.round((players[j].goals * 100) / goalsTotal);

players[j].coefficient = coefficient;

players[j].percent = percentage;

}

return players;

};

getStatistics(players);

1 лайк

Spasibo za takuiu detalnuiu osmotr <3

Prosto u menia neskolko voprosov:

#1

Чтобы посчитать проценты, нам необходимо использовать другую схему, а именно:

Matematicheski poriadok ne imeet osoboe znachenie.
A zachem mne tak sdelat, prosta za logicheski poriadok?

#2 Zachem nujno sdelat kavichki sdes? mi prosta umnojaem a potom razdeliam

Math.round((players[j].goals * 100) / goalsTotal);

Ладно, подловили! :slight_smile: Действительно, можно без кавычек и в другом порядке, код всё равно будет работать.

1 лайк