Задать вопрос
@Nivaech

Как посчитать количество повторений символов в строке?

Нужно написать функцию, которая бы принимала строку, разбивала ее на отдельные буквы, и считала их количество.
Например, если в функцию идет строка "aba", на выходе должен быть такой результат:
{ 'a': 2, 'b': 1 }
  • Вопрос задан
  • 1389 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Делаем просто:

const result = [...str].reduce((acc, n) => (acc[n] = -~acc[n], acc), {});

Делаем сложно, решаем задачу в более общем виде - вот функция, считающая повторения произвольных значений:

function count(data, key = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const result = {};

  for (const n of data) {
    const k = getKey(n);
    result[k] = (result[k] ?? 0) + 1;
  }

  return result;
}

В вашем случае применять так: const result = count(str);.

Работать можно не только со строками, но и, например, с массивами:

count([{name: 'A'}, {name: 'B'}, {name: 'B'}, {name: 'B'}], 'name'); // {A: 1, B: 3}

Или коллекциями DOM-элементов:

<div data-country="USA">New York</div>
<div data-country="USA">Boston</div>
<div data-country="USA">Las Vegas</div>
<div data-country="Japan">Osaka</div>
<div data-country="Japan">Tokyo</div>
<div data-country="Japan">Kyoto</div>
<div data-country="Japan">Yokohama</div>
<div data-country="Germany">Munich</div>
<div data-country="Germany">Dresden</div>

const cities = document.querySelectorAll('[data-country]');
count(cities, n => n.dataset.country); // {USA: 3, Japan: 4, Germany: 2}

Вообще, с любыми итерируемыми объектами работать можно:

count(Array(9).keys(), n => [ 'чётные', 'нечётные' ][n & 1]) // {чётные: 5, нечётные: 4}
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Диетический детский вариант, если не переварился гениальный однострочник от уважаемого 0xD34F:
const countr = str => {
  const result = {};
  const len = str.length;

  for (let i = 0; i < len; i++) {
    const char = str[i];
    if (!result[char]) result[char] = 0;
    result[char]++;
  }

  return result;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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