Сигналы [посчитать количество доменов в массиве емейлов]

Здравствуйте. Помогите пожалуйста решить данную задачу.
"Реализуйте и экспортируйте по умолчанию функцию, которая принимает на вход список емейлов, а возвращает количество емейлов, расположенных на каждом бесплатном домене. Список бесплатных доменов хранится в константе freeEmailDomains.
Я понимаю, что нам нужно создать функцию которая примет emails, дальше методом split обозначить “@”, затем пройтись через метод reduce, и сравнить домены… но возникает головоломка от неопытности. Направьте пожалуйста.

const emails = [
‘info@gmail.com’,
‘info@yandex.ru’,
‘info@hotmail.com’,
‘mk@host.com’,
‘support@hexlet.io’,
‘key@yandex.ru’,
‘sergey@gmail.com’,
‘vovan@gmail.com’,
‘vovan@hotmail.com’,
];

getFreeDomainsCount(emails);
// {
// ‘gmail.com’: 3,
// ‘yandex.ru’: 2,
// ‘hotmail.com’: 2,
// };"

На словах все верно описываешь. Думаю что непонятка происходит с тем как регистрировать домены. Вот пример кода без редьюса, из него станет понятнее

const emails =  [
    'info@gmail.com',
    'info@yandex.ru',
    'info@hotmail.com',
    'mk@host.com',
    'support@hexlet.io',
    'key@yandex.ru',
    'sergey@gmail.com',
    'vovan@gmail.com',
    'vovan@hotmail.com',
];


function countDomains(emails) {
    const freeDomainEmails = ['gmail.com', 'yandex.ru', 'hotmail.com']
    const res = {}
    emails.forEach((email) => {
        // извлекли домен
        const [name, domain] = email.split('@')
        // проверили из списка бесплатных ли он
        if (freeDomainEmails.includes(domain)) {
            // проверили успели ли мы посчитать его ранее
            if (!res[domain])  {
                // домен не был посчитан, делаем "начальное" состояние для подсчета
                res[domain] = 0
            }
            // дописываем плюсдомен к тому количеству что было посчитано
            res[domain] += 1
        }
    })
    return res
}
console.log(countDomains(emails))
1 лайк

Спасибо большое, что расписали пошагово. Я сейчас буду анализировать код.