JavaScript - сумма ключевых значений в объекте, одно значение удваивается - PullRequest
0 голосов
/ 11 мая 2019

Ссылка на проблему CodeWars

Мне нужно подвести итоги всех участников собрания.Если их оценки <= 5, верните «Убирайся сейчас!»В противном случае, возвращаемое значение «Nice Work Champ!» </p>

meet передается как объект:

{
    tim: 0,
    jim: 2,
    randy: 0,
    sandy: 7,
    andy: 0,
    katie: 5,
    laura: 1,
    saajid: 2,
    alex: 3,
    john: 2,
    mr: 0
  }

Если человек в meet является boss, его оценка получаетв два раза.(Я думаю, что это проблема, с которой я сталкиваюсь сейчас - их оценка не удваивается).

Рейтинг счастья - это общая оценка / количество людей в комнате.

Вот что я попробовал, и он проходит 76/103 тестов на CodeWars.Но я не могу понять, что я делаю неправильно.

function outed(meet, boss) {

let values = [];

  for (let i in meet) {

    let score = meet[i];

    if (i === boss) {

        values.push(score * 2);

    }

    values.push(score);

  }

  let sumOfValues = values.reduce((previousValue, currentValue) => previousValue + currentValue);
  let happinessRating = (sumOfValues / values.length);

  if (happinessRating <= 5) {
      return "Get Out Now!";
  }
  return "Nice Work Champ!";
}

Помощь оценена!

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

Вы добавляете значение босса в массив дважды (один раз вдвое и один раз по номиналу).Вам просто нужно добавить else здесь:

if (i === boss) {
    values.push(score * 2);
}
else {
    values.push(score);
}
2 голосов
/ 11 мая 2019

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

var keys = Object.keys(meet);

return keys.reduce((sum, key) => s + (key === boss ? 2 : 1) * meet[key], 0) / keys.length;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...