我有一个特定帖子的反应对象数组。
它看起来像这样:
reactions: [
{user: 21, reaction:'haha'},
{user: 7, reaction:'haha'},
{user: 15, reaction:'haha'},
{user: 55, reaction:'wow'},
{user: 27, reaction:'wow'},
{user: 87, reaction:'wow'},
{user: 15, reaction:'heart'},
{user: 15, reaction:'heart'},
{user: 95, reaction:'like'},
{user: 100, reaction:'like'},
{user: 209, reaction:'like'},
{user: 122, reaction:'like'},
]
我如何使其结果应该是:['like', 'haha', 'wow']
您可以对一个对象的相同反应进行计数,获取条目,对它们进行排序,并仅获得键的前三名。
const
reactions = [{ user: 21, reaction: 'haha' }, { user: 7, reaction: 'haha' }, { user: 15, reaction: 'haha' }, { user: 55, reaction: 'wow' }, { user: 27, reaction: 'wow' }, { user: 87, reaction: 'wow' }, { user: 15, reaction: 'heart' }, { user: 15, reaction: 'heart' }, { user: 15, reaction: 'like' }, { user: 15, reaction: 'like' }, { user: 15, reaction: 'like' }, { user: 15, reaction: 'like' }],
top3 = Object
.entries(reactions.reduce((r, { reaction }) => (r[reaction] = (r[reaction] || 0) + 1, r), {}))
.sort(([, a], [, b]) => b - a)
.slice(0, 3)
.map(([k]) => k);
console.log(top3);