Задача на перебор массива. Возврат другого массива
Уважаемые форумчане, нужна ваша помощь. Есть функция которая принимает параметрами строку и символ и подсчитывает кол-во вхождений данного символа в данную строку.
let getCountItem = (stroka, bukva) => {
return stroka.split('').reduce((count, elem) => count += elem === bukva, 0);
};
Как адаптировать этот код, что бы он принимал вторым аргументом не один символ, а массив символов? И соответственно возвращал не одно число, а массив чисел.
let arr = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'э', 'ю', 'я'];
let getArrFinal = ((string, arr) => {
return string.split('').reduce((arrFinal, elem, index,) => {
}, [])
})
console.log(getArrFinal('abrakadabra', arr))
Ответы (2 шт):
Можно просто перебрать все символы массива символов arr и для каждого символа вызвать функцию подсчёта getCountItem. Как-то так:
let getCountItem = (stroka, bukva) => {
return stroka.split('').reduce((count, elem) => count += elem === bukva, 0);
};
let getArrFinal = (string, arr) => {
return arr.map(elem => getCountItem(string, elem));
};
let arr = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'э', 'ю', 'я'];
console.log(getArrFinal('абракадабра', arr));
Но тут мне кажется разумным входную строку string разобрать на массив символов один раз, и переписать функцию getCountItem так, чтобы она принимала массив:
let getCountItem = (symbArr, bukva) => {
return symbArr.reduce((count, elem) => count += elem === bukva, 0);
};
let getArrFinal = (string, arr) => {
let symbArr = string.split('');
return arr.map(elem => getCountItem(symbArr, elem));
};
let arr = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'э', 'ю', 'я'];
console.log(getArrFinal('абракадабра', arr));
Принимает параметрами строку и символ и подсчитывает кол-во вхождений данного символа в данную строку. - Сделайте сплит по этому символу и получите количество подстрок. А количество символов это count - 1
let getItemCount = (stroka, simvol) => stroka.split(simvol).length - 1;
console.log(getItemCount("asdaeesdsfzxzcas", "a"))
let arr = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'э', 'ю', 'я'];
let getArrFinal = (string, arr) => arr.map(item => getItemCount(string, item));
console.log(getArrFinal('абракадабра', arr))
Другой вариант это замена на пустую строку и разность длин
let getItemCount = (stroka, simvol) => stroka.length - stroka.replaceAll(simvol, '').length;
console.log(getItemCount("asdaeesdsfzxzcas", "a"))
let arr = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'э', 'ю', 'я'];
let getArrFinal = (string, arr) => arr.map(item => getItemCount(string, item));
console.log(getArrFinal('абракадабра', arr))