Количество повторяющихся символов в строке

Есть строка, необходимо посчитать кол-во повторяющихся символов в ней и вернуть результат в виде двумерного массива в порядке появления символов.

'abracadabra' == [['a', 5], ['b', 2], ['r', 2], ['c', 1], ['d', 1]]

Написал такой код:

const str = 'abracadabra';

let orderedCount = text => {
  return Object.entries(text.split('').reduce((acc, el) => {
    acc[el] = (acc[el] || 0) + 1;
    return acc;
  }, {}));
}

console.log(orderedCount(str))

К сожалению, в случае строки, состоящей из цифр, он их в результате сортирует. Как избавиться от этой сортировки?


Ответы (1 шт):

Автор решения: Stepan Kasyanenko

Дело в том, что современные браузеры сортируют порядок числовых ключей в объекте при обходе.

Что бы этого избежать, не используйте объект, используйте Map.

Например:

const str = '4321';

let orderedCount = text => {
  return Array.from(text.split('').reduce((acc, el) => {
    acc.set(el, (acc.get(el) || 0) + 1);
    return acc;
  }, new Map()));
}

console.log(orderedCount(str));

→ Ссылка