@DyadkoOrest

Как посчитать количество голосов за каждого пользователя по id из массива результатов?

Есть массив с пользователями, в котором есть пустое поле results:

const users = [
      {
        name: 'One',
        id: 1,
        result: 0,
      },
      {
        name: 'Two',
        id: 2,
        result: 0,
      },
      {
        name: 'Three',
        id: 3,
        result: 0,
      },
    ];

Также есть массив с результатами голосования за пользователей:

const results = [
      {
        id: 1,
        counts: 2
      },
      {
        id: 3,
        counts: 8
      }
    ]

Нужно посчитать, сколько процентов проголосовало за каждого пользователя и вписать это значение в массив с пользователями в поле result:

users = [
      {
        name: 'One',
        id: 1,
        result: 20,
      },
      {
        name: 'Two',
        id: 2,
        result: 0,
      },
      {
        name: 'Three',
        id: 3,
        result:  80,
      },
    ];
  • Вопрос задан
  • 100 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const total = results.reduce((acc, n) => acc + n.counts, 0);
const resultsObj = Object.fromEntries(results.map(n => [ n.id, n.counts ]));
const usersWithResults = users.map(n => ({
  ...n,
  result: (resultsObj[n.id] ?? 0) / total * 100,
}));
Ответ написан
Комментировать
john36allTa
@john36allTa
alien glow of a dirty mind
function calculateResults(users,results){
	let map = new Map();
	let total = 0;
	for (let result of results){
		let exist = map.get(result.id);
		if (exist) exist.counts += result.counts;
		else map.set(result.id, result.counts);
		total += result.counts;
	}
	for (let user of users){
		user.result = (map.get(user.id) || 0) * 100 / total;
	}
	return users;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы