Направления:

  • Напишите функцию, которая возвращает количество гласных в строке. Гласные – это символы «а», «е», «и», «о» и «у».

Примеры:

  • гласные («Привет!») → 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;
}

Я не сам придумал это решение. Это было показано мне в курсе, который я сейчас изучаю по вопросам интервью по программированию. Это определенно вдохновило меня узнать больше о внутренней работе JavaScript. И это также показало мне, что, как и в любом другом языке, чем лучше вы его понимаете, тем меньше вам нужно говорить.