JSFiddle - React, Tailwind, and code Playground

JavaScript

var endorsements = [
	{ skill: 'css', user: 'Bill' },
  { skill: 'html', user: 'Moe' },
  { skill: 'javascript', user: 'John' },
  { skill: 'javascript', user: 'Taylor' },
  { skill: 'css', user: 'Peter' }
];

// write program that takes an array like above and returns:

[
	{ skill: 'css', users: ['Bill', 'Peter'], count: 2 },
  { skill: 'html', users: ['Moe'], count: 1 },
  { skill: 'javascript', users: ['John', 'Taylor'], count: 2 }
]

const bySkill = {}
endorsements.forEach(value => {
	if (!bySkill[value.skill]) {
  	bySkill[value.skill] = []
  }
  
	bySkill[value.skill].push(value)
})

let output = []
Object.keys(bySkill).forEach(key => {
	let users = bySkill[key]
	output.push({
  	skill: users[0].skill,
    users: users.map(user => user.user),
    count: users.length
  })
})

console.log(output)