@lexstile

Как отсортировать массив строк по количеству (по убыванию) в массиве?

// input
let arr = ['foo', 'bar', 'bar', 'baz', 'wtf', 'foo', 'wtf', 'wtf', 'wtf', 'foo'];

// output
['wtf', 'foo', 'bar', 'baz']


У меня получалась такая ерунда:
Object.entries(arr.reduce((a, b) => ({ ...a, [b]: (a[b] || 0) + 1}), {})).sort(([,a],[,b]) => b - a).map(([a]) => a);


Искреннее верю, что можно проще и за меньше количество итераций.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 2
@StockholmSyndrome
const acc = arr.reduce((acc, el) => ({...acc, [el]: (acc[el] || 0) + 1}), {});
const sortedArr = Object.keys(acc).sort((a, b) => acc[b] - acc[a]);
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
такая же длинная макаронина получилась:
[...arr.reduce((acc, c) => (acc.set(c, (acc.get(c) ?? 0) + 1), acc), new Map()).entries()]
  .sort((a, b) => b[1] - a[1]).map((el) => el[0])
Собрать словарь (значение: счётчик), из него массив пар [key, value] отсортировать по убыванию второго; оставить только первые.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы