const toLanguage = ({ language }) => language; const toUser = ({ user }) => user; const toLanguageUsers = ([language, group]) => { const user = group.map(toUser); return { language, user, count: user.length, }; }; const formattedArray = Object.entries(endorsedSkills.groupBy(toLanguage)).map( toLanguageUsers ); console.log(formattedArray);
Or the less readable version
const formattedArray = Object.entries( endorsedSkills.groupBy(({ language }) => language) ).map(([language, group]) => { const user = group.map(({ user }) => user); return { language, user, count: user.length, }; }); console.log(formattedArray);
MDN: Array.prototype.groupBy()
Array.prototype.groupBy()
Array Grouping Proposal
Currently at Stage 3
Currently polyfilled by core-js or perhaps something like
function groupBy(array, toKey) { const groupElement = (groups, element) => { const key = toKey(element); if (Object.hasOwn(groups, key)) groups[key].push(element); else groups[key] = [element]; return groups; }; return array.reduce(groupElement, {}); } const toLanguage = ({ language }) => language; const toUser = ({ user }) => user; const toLanguageUsers = ([language, group]) => { const user = group.map(toUser); return { language, user, count: user.length, }; }; const formattedArray = Object.entries(groupBy(endorsedSkills, toLanguage)).map( toLanguageUsers ); console.log(formattedArray);
to be replaced later.
I'm looking forward to this one being better supported!
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Or the less readable version
MDN:
Array.prototype.groupBy()
Array Grouping Proposal
Currently at Stage 3
Currently polyfilled by core-js or perhaps something like
to be replaced later.
I'm looking forward to this one being better supported!