Ссылка на вызов Codewars
Мне удалось создать карту частот для счетчика букв в строке:
function letterFrequency(text){
text = text.toLowerCase();
let map = {};
let array = text.split('');
array.forEach((value, index) => {
if (!map[value]) {
map[value] = 0;
}
map[value] += 1;
});
return Object.entries(map).filter((el) => el[0] !== ' ')
//sorts array according to count
.sort((a, b) => b[1] - a[1]);
//how to sort alphabetically when letters have same count?
}
console.log(letterFrequency('aaAabb dddDD hhcc'));
Но я не смог понять, как сортировать по алфавиту, когда счетчики частоты одинаковы.
Т.е.
[['d',5], ['a',4], ['b',2], ['h',2], ['c',2]]
Вместо этого должно быть:
[['d',5], ['a',4], ['b',2], ['c',2], ['h',2]]
Как я могу вести подсчет частоты как основной приоритет сортировки, но затем также сортировать по алфавиту после сортировки по частоте?
Также попытка этого, к сожалению, не имела никакого эффекта:
function letterFrequency(text){
text = text.toLowerCase();
let map = {};
let array = text.split('');
array.forEach((value, index) => {
if (!map[value]) {
map[value] = 0;
}
map[value] += 1;
});
return Object.entries(map).filter((el) => el[0] !== ' ')
.sort((a, b) => b[1] - a[1])
.sort((a, b) => a[0] - b[0]);
}