@Nivaech

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

Нужно написать функцию, которая бы принимала строку, разбивала ее на отдельные буквы, и считала их количество.
Например, если в функцию идет строка "aba", на выходе должен быть такой результат:
{ 'a': 2, 'b': 1 }
  • Вопрос задан
  • 1191 просмотр
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const result = [...str].reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), {});

Или, в более общем виде:

function count(data, key = n => n) {
  const counted = {};

  for (const n of data) {
    const k = key(n);
    counted[k] = -~counted[k];
  }

  return counted;
}


const result = count(str);

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

const nums = [ -Infinity, -1, 0, 0, 0, 0, 69, 187, 666 ];
console.log(count(nums, Math.sign)); // {0: 4, 1: 3, -1: 2}

Или коллекциями 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]');
console.log(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;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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