Думаю, я бы сделал это примерно так:
rankFactors() {
const headers = this.headers;
const counts = {};
for (const header of headers) {
counts[header] = (counts[header] || 0) + 1;
}
const factors = Object.keys(counts).map(header => {
return {
name: header,
count: counts[header]
}
});
factors.sort((a, b) => b.count - a.count);
return factors;
}
Первый этап очень похож на то, что у вас было, создание объекта отсчета. Это простая структура данных, с которой можно работать для сбора этих подсчетов, но после того, как этот этап завершен, это не лучший выбор для работы с сортировкой. Для этого нам лучше использовать массив.
Итак, затем он преобразует объект в массив объектов, каждый из которых имеет форму {name: 'Excitement', count: 2}
. Этот массив затем сортируется на основе количества и затем возвращается. Вы можете добавить .slice(0, 3)
, если вы просто хотите получить верхнюю 3.