var totalGoals = totalGoals + players[i].goals;
вот из-за этой записи у вас в процентах появляется Null
выведите объявление переменной за цикл (с присвоением стартового значения 0), а внутри оставьте лишь totalGoals += players[i].goals;
Почему так происходит? (простыми словами - низя объявлять переменную и тут же присваивать её себе же).
по логике вещей в проценты попадает значение NaN
но от нас в проверке скрыта часть кода, я полагаю это var str = JSON.stringify(players);
а приведенный объект к JSON-строке поменял просто NaN на null
Ох, сам бы никогда не допер, спасибо большое. Объявил переменную, теперь все заработало. Я целый день убил блин, не мог понять что было не так. Даже дописывал отдельно три объекта-игрока, вызывал вручную функцию, все как по заданию сделал, все равно не получалось пройти, голову сломал, логика то вроде бы верная была. Значит проще и безопаснее делать так, по топорному, спасибо!
Итог теперь такой, все работает
Код
var getStatistics = function (players) {
var totalGoals = 0;
for (var i = 0; i < players.length; i++) {
totalGoals += players[i].goals;
}
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*100/totalGoals);
}
return players;
};
Ооооочень странная глава, доработайте её пожалуйста.
До этого задания нам “объясняли” как объявлять объекты, так почему в этом задании их объявлять не нужно и как я должен до этого догадаться?
И все 19 страниц до этого я бы не понял если бы не люди в комментариях.
Причём до этой главы всё было очень понятно
вот строчка из задания " Каждый футболист в этом массиве описывается объектом с тремя полями: имя (свойство name ), забитые голы (свойство goals ) и голевые пасы (свойство passes )."
Вы или добавьте эти объекты или напишите что их создавать не нужно.
Потому как не логично давать первое задание таким. Где в итоговом коде не видно объект :
код
var getStatistics = function (players) {
var sumGoals = 0;
for(var i=0;i<players.length;i++){
sumGoals+=players[i].goals
}
for(var i=0;i<players.length;i++){
players[i].coefficient = players[i].goals2+players[i].passes
players[i].percent = Math.round((players[i].goals100)/sumGoals);
}
return players
};
так они подставляются в результате проверки. если вы до сих пор не заметили, проверка вызывает функцию со своими аргументами. вы их не описываете, но структурно программа должна совпадать со структурой передаваемого аргумента, не важно, массив ли это, примитив или объект.
это как бы само собой разумеющееся было, начиная с первых заданий по js.
let getStatistics = (players) => {
let sumgoals= players.map(a=>a.goals).reduce((a,b)=>a+b);
let coefficient = x =>x.goals2+x.passes;
let percent = x => Math.round(x.goals100/sumgoals);