Запись в блоге Дэниела Бернса №1

Подсчет количества символов в строке с помощью сокращения в JavaScript

Собственный метод массива .reduce можно использовать для создания количества букв в строке.

Reduce — это метод массива, поэтому первое, что нужно сделать, это преобразовать строку в массив, используя строковый метод .split и передав пустую строку.

var question = 'сколько там каждой буквы?'.split('');

Возвращает:

[“h”, “o”, “w”, “m”, “a”, “n”, “y”, “o”, “f”, “e”, “a”, “c”, “h”, “l”, “e”, “t”, “t”, “e”, “r”, “a”, “r”, “e”, “t”, “h”, “e”, “r”, “e”, “?”]

Затем вы можете вызвать .reduce для этого массива. Reduce принимает два аргумента, функцию обратного вызова и начальное значение. Хитрость возврата объекта заключается в том, чтобы передать пустой объект в качестве начального значения.

var tally = question.reduce (обратный вызов, {});

Функция обратного вызова требует двух параметров, аккумулятора и ссылки на текущий элемент массива. Он также может принимать еще два необязательных параметра (ссылку на индекс текущего элемента и ссылку на переданный массив), но мы не будем их здесь использовать. Поскольку мы передаем пустой объект в качестве начального значения, аккумулятор будет определен как объект. Теперь все, что нам нужно сделать, это проверить, существует ли буква в качестве ключа в этом объекте. Для этого мы можем использовать оператор «если» с оператором «в». Оператор in возвращает значение true, если указанное свойство находится в указанном объекте. Если он возвращает true, мы увеличиваем значение этого свойства. Если он возвращает false, мы устанавливаем значение этого свойства равным единице. Осталось только вернуть аккумулятор и «Вуаля!», вы получите подсчет того, сколько раз буква встречается в строке.

var tally = question.reduce (функция (аккумулятор, буква) {

если (буква в аккумуляторе) {

аккумулятор[буква]++;

} еще {

аккумулятор [буква] = 1;

}

обратный аккумулятор;

}, {});

Возвращает:

Tally = { ?: 1, a: 3, c: 1, e: 6, f: 1, h: 3, l: 1, m: 1, n: 1, o: 2, r: 3, t: 3 , ш: 1, у: 1 }