Направления:
- Напишите функцию, которая возвращает количество гласных в строке. Гласные – это символы «а», «е», «и», «о» и «у».
Примеры:
- гласные («Привет!») → 3
- гласные («Почему ты спрашиваешь?») → 4
- гласные («Почему?») → 0
Ждать. Подождите секунду. Прежде чем двигаться дальше, напишите эту функцию.
Каково было ваше решение? Было ли это похоже на это?
function vowels(str) { let vowels = []; for (char of str.toLowerCase()){ if (char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u'){ vowels.push(char) } } if (vowels === []){ return 0 } else { return vowels.length } }
Так выглядела моя первая попытка решить этот вопрос. Это 13 строк кода. Очень просто. Это не особенно сложный вопрос.
Но здесь есть возможность реорганизовать это уродливое выражение if.
if (char === 'a' || char === 'e' || char === 'i' || char === 'o' || char === 'u')
А кто знает? Может быть, мы чему-то научимся по ходу дела!
Давайте поговорим о встроенном вспомогательном методе JavaScript под названием .match.
Вот что MDN говорит об этом.
Метод match()
извлекает результат сопоставления строки с регулярным выражением.
Что .match позволяет нам сделать, так это избавиться от этого уродливого оператора if и придумать что-то гораздо более элегантное.
const matches = str.match(/[aeiou]/gi)
Вот что было бы на выходе, если бы мы назвали это в строке «Эдгар Аллан По».
Теперь, когда у нас есть этот массив гласных, все, что нам нужно сделать, это добавить простую троичную инструкцию. Примечание о .match — если нет символов, соответствующих переданному ему регулярному выражению, он вернет null, что означает «ложь».
Окончательное рефакторинговое решение:
function vowels(str) { const matches = str.match(/[aeiou]/gi) return matches ? matches.length : 0; }