JS task: find out the number of vowels in a string | Find Vowels

Поділитися
Вставка
  • Опубліковано 19 гру 2024

КОМЕНТАРІ • 92

  • @frontendscience
    @frontendscience  5 років тому +1

    Друзья, пишите свои решения в комментариях! Чем больше будет таких решений и чем они будут разнообразнее, тем больше пользы они принесут всем, тем успешнее будут наши собеседования!

  • @oleksand-boichenko2316
    @oleksand-boichenko2316 5 років тому +38

    Ну или так :)
    function findVowels(str) {
    const vowels = ['a', 'e', 'i', 'o', 'u'];
    return str.split('').filter(ltr => vowels.includes(ltr)).length;
    }

    • @smashno
      @smashno 5 років тому +3

      Классное решение! Мне нравится его "нативность". С помощью фильтрации оставляем гласные и смотрим длину массива!

    • @stasprofile3780
      @stasprofile3780 3 роки тому +1

      function findVowels (word) {
      const vowels = ['a', 'e', 'i', 'o', 'u'];
      return word.toLowerCase().split('').reduce(function(acc, el) {
      return binarySearch(vowels, el) !== -1 ? acc + 1 : acc;
      }, 0)
      }
      увидел это решение и понял, что перемудрил чуток...

    • @egamberditursunov2079
      @egamberditursunov2079 2 роки тому

      Решение классное! Маленькая поправка: return str.toLowerCase().split('').filter(ltr => vowels.includes(ltr)).length;

  • @terek5832
    @terek5832 2 роки тому +1

    Можно ли использовать optional chaining? str => str.match(/[aeiou]/gi )?.length || 0

  • @alexnikolskiy
    @alexnikolskiy 5 років тому +6

    Привет, Серёж. Спасибо за новую интересную задачу. Не смотря твоё видео, решил задачу также за пару минут, только в первом варианте я не использовал массив:
    function findVowel(str = '') {
    let count = 0;
    for (let ch of str.toLocaleLowerCase()) {
    if ('aeiou'.includes(ch)) {
    count += 1;
    }
    }
    return count;
    }
    А во втором варинате записал более компактно, у нас же фан тоже присустсвует ;)
    const findVowel = str => matches = str.match(/[aeiou]/gi) ? matches.length : 0;

    • @alexnikolskiy
      @alexnikolskiy 5 років тому +2

      Ещё такое решение пришло в голову:
      function findVowel(str) {
      let count = 0;
      let regexp = /[aeiou]/gi;
      while (regexp.exec(str)) {
      count++;
      }
      return count;
      }

    • @Davidovich_aka_smoozydrinker
      @Davidovich_aka_smoozydrinker 3 роки тому

      @@alexnikolskiy регулярка - правильное решение. Предыдущий код - неправильное, так как ищет только первое вхождение и не будет отражать количество гласных для любой произвольной строки.

    • @SerzhNesteruk
      @SerzhNesteruk Рік тому

      Во втором варианте переменная matches не объявлена, что приведёт к ошибке в strict mode. Используя optional chaining из ES2020, можно оформить решение немного иначе:
      const findVowels = str => str.match(/[aeiou]/gi)?.length || 0;

  • @daemonval
    @daemonval 4 роки тому +1

    Не знал про includes, пошел другим путем :)
    const findVowels = str => {
    const vowelsArr = ['a', 'e', 'i', 'o', 'u'];
    let counter = 0;
    const myStrArr = str.toLowerCase().split('');
    vowelsArr.forEach(letter => {
    myStrArr.forEach(myLetter => {
    if (myLetter === letter) counter++;
    });
    });
    return counter;
    };

  • @karinakrupodior1455
    @karinakrupodior1455 3 роки тому +1

    Задачка похожа на эту, как бы Вы её решили?
    Implement function matchCount which will find and return number
    of how many times two params present togethers in string passed as a first argument.
    Examples matchCount('ab___ab__', 'a', 'b') // 2
    matchCount(bv___ab__, 'a', 'b') // 1
    const MatchCount = (str,param1,param2) => {
    }

    • @frontendscience
      @frontendscience  3 роки тому

      Очень много вопросов к условию :)
      Строки всегда разбиты такими вот разделителями "___"?
      Если matchCount('ab___ab__', 'a', 'b') // 2 то что вернет matchCount('ab___ba__', 'a', 'b') // ?? То есть важен ли порядок в паре

  • @КириллЧерных-ш8ш
    @КириллЧерных-ш8ш 3 роки тому

    Добрый день, а каким редактором вы пользуютесь в данном примере?

  • @ArtOfFun
    @ArtOfFun 3 роки тому +3

    const findVowels = (str) => {
    const letters = [...str.toLowerCase()];
    const vowels = ['a', 'e', 'i', 'o', 'u'];
    let count = 0;
    vowels.forEach((letter) => {
    if (letters.includes(letter)) {
    count += 1;
    }
    });
    return count;
    };

  • @shpioner42
    @shpioner42 Рік тому

    Ну наверное не самое лучшее, зато работает :)
    function findVolwels(str){
    let arr = ['a', 'e', 'i', 'o', 'u'];
    let count = 0;
    for(let i = 0; i < str.length; i++){
    for(let j = 0; j < arr.length; j++){
    if(str[i].toLowerCase() == arr[j]){
    count++;
    }
    }
    }
    return count;
    }
    console.log(findVolwels('hello'))
    console.log(findVolwels('why'))

  • @dimamashensky6870
    @dimamashensky6870 3 роки тому

    Спасибо большое )))

  • @mikebl8670
    @mikebl8670 4 роки тому +1

    Thanks!)

  • @yarik83men51
    @yarik83men51 3 роки тому

    На Java:
    public class FindVowels {
    public static void main(String[] args) {
    String s1 = "hello";
    String s2 = "hi";
    System.out.println(countOfVowels(s1));
    System.out.println(countOfVowels(s2));
    }
    private static int countOfVowels(String str){
    return str.length() - str.replaceAll("[aeiu]", "").length();
    } }

  • @allInJest
    @allInJest 4 роки тому +1

    Я не профи конечно, но написал функцию которая запрашивает строку у пользователя и считает русские и английские гласные буквы.
    Вместо prompt можно использовать input через value.
    "use strict";
    function findVowels() {
    let text = prompt('Ввести текст', '').toLowerCase().split('');
    let numberChar = text.length;
    let count = 0;
    const vowels = ['у', 'е', 'ы', 'а', 'о', 'э', 'я', 'и', 'a', 'e', 'i', 'o', 'u'];
    for (let i = 0; i < numberChar; i++) {
    if (vowels.includes(text[i])) {
    count++;
    }
    }
    console.log(count);
    }
    findVowels();

    • @frontendscience
      @frontendscience  4 роки тому +1

      Благодарю за решение! 👍

  • @ВладБирюков-е7г
    @ВладБирюков-е7г 3 роки тому +2

    const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
    const findVowels = (str: string): number => {
    return str.split('').reduce((acc, char) => {
    if (vowels.has(char)) acc ++
    return acc
    }, 0)
    }

    • @frontendscience
      @frontendscience  3 роки тому

      Благодарю за решение! Компактно вышло!

  • @ihormykhaylyshyn4943
    @ihormykhaylyshyn4943 4 роки тому +1

    А как зделать ето только с textarea

    • @frontendscience
      @frontendscience  4 роки тому

      нужно на textarea повесить обработчик события addEventListener на keyUp например. И каждый раз вызывать нашу функцию которую мы написали - внутрь передавать строку - содержимое textarea. PS: надеюсь я правильно понял вопрос

  • @Ramosok
    @Ramosok 9 місяців тому

  • @Ethereum5500
    @Ethereum5500 2 роки тому

    А как узнать сколько букв с слове, и как сделать так чтобы на следующей строке была первая и последняя буква слова

    • @kira-u3c5x
      @kira-u3c5x 2 роки тому +1

      количество букв в слове: let word = word.length
      первая буква слова: let first = word[0]
      последняя буква слова: let last = word[word.length -1]

  • @maginbergCSGO
    @maginbergCSGO 5 років тому +2

    Та так не интересно ,лучше найди тестовые задания с вакансий, там такие объемы ща порой запрашивают, что складывается впечатление ,что тебя не взяли, но зато ты уже во всю помогаешь пилить проект :D

    • @alexnikolskiy
      @alexnikolskiy 5 років тому

      Поддержу, хотелось бы посложнее немного задач. Неужели в MyHeritage и Яндексе спрашивали на собеседованиях такие задачки?

    • @smashno
      @smashno 5 років тому +1

      Да, иногда бывает) Я сам уже подумывал над этим, но пока склоняюсь к мысли что это должен быть стрим на час или два - а это уже другой формат. И надо понимать кому такое интересно.

    • @alexnikolskiy
      @alexnikolskiy 5 років тому

      @@smashno На самом деле польза от таких не очень сложных задач тоже есть. Например, я сейчас освежаю в памяти регулярые выражения) Их в работе не так уж и часто используешь, но знать нужно и на собеседовании могут спросить.

  • @СтаниславБергер-т4г
    @СтаниславБергер-т4г 9 місяців тому

    Интересно, почему Y никогда не записывают в гласную?))

  • @levlubentsov9476
    @levlubentsov9476 4 роки тому +2

    const vowelsCount = (str) => {
    var arr = [];
    str.split("").filter(function (item) {
    if(vowels.includes(item)){
    str[item] = true
    arr.push(item)
    }
    })
    return arr.length
    };

    • @frontendscience
      @frontendscience  4 роки тому

      Красиво получилось

    • @SerzhNesteruk
      @SerzhNesteruk Рік тому

      Спасибо, что поделились решением!
      ...но оно сейчас, к сожалению, не работает 🙁
      1) Переменная vowels (которая вероятно должна содержать массив гласных) в коде нигде не определена, поэтому обращение к ней вызовет ошибку. Возможно, что эта переменная была создана отдельно. 🤔 Но обращение из функции к глобальным переменным всё таки считается плохой практикой. Эта функция не является чистой, поскольку массив vowels не инкапсулирован.
      2) Использование массива в качестве счётчика довольно креативная идея, но её рациональность весьма сомнительна (учитывая принцип KISS).
      3) Инструкция str[item] = true, хотя и не вызывает ошибок, но не имеет ни практического смысла, ни даже какой-либо ясной цели. Вспомним, что примитивные типы данных в JS являются иммутабельными. В этой инструкции мы вызываем объект-обёртку для строки str, и присваиваем её динамическому свойству item (напомню, что в переменной item у нас хранится один из символов этой строки) булевое значение true, после чего объект-обёртка благополучно удаляется. И так, не ясно зачем, в каждой итерации метода filter. 🤷‍♂️

  • @nicolaair8766
    @nicolaair8766 4 роки тому +2

    Почему-то решение этой задачи все копипастят забывая о гласной Y.
    Мое решение:
    const countVowels = str => str.replace(/[^eyuioa]/g, '').length
    Короче за счет отсутствия условия.
    gist.github.com/devable/a6f7a09e2fae399676fdc399481d42a5

    • @frontendscience
      @frontendscience  4 роки тому +3

      "Копипастят" видать потому что "y" - это не гласная в английском :) i.pinimg.com/736x/68/de/9b/68de9be72fa86f6cd500a61efd86ff62--third-grade-language.jpg

    • @frontendscience
      @frontendscience  4 роки тому +1

      А вообще решение хорошее!

    • @nicolaair8766
      @nicolaair8766 4 роки тому +2

      В инете инфа разнится :)

    • @tepumasutasauno8671
      @tepumasutasauno8671 3 роки тому

      @@frontendscience Y не совсем не гласная в английском. Она представляет одновременно и гласную, и согласную simple.wikipedia.org/wiki/Vowel#:~:text=In%20English%20there%20are%20five%20vowel%20letters%20in%20the%20alphabet.&text=These%20letters%20are%20vowels%20in,both%20vowel%20and%20consonant%20sounds.

  • @МаксимБондаренко-н1ь

    "Y" тоже гласная

    • @frontendscience
      @frontendscience  4 роки тому

      "В английском языке буква Y может отвечать как за гласный, так и согласный звук."

    • @coder1488
      @coder1488 Рік тому

      @@frontendscienceв слове why она гласная)

  • @blackmonkeymusic5749
    @blackmonkeymusic5749 2 роки тому

    интересная задача. вот только у меня вопрос. а как не посчитать сколько гласных, а убрать все гласные из слова и вывести только согласные?)))) p.s. вроде 'y', тоже гласная)

    • @404russ
      @404russ 2 роки тому

      ты пьяный ?

  • @ІлляАндрущенко
    @ІлляАндрущенко 3 роки тому

    Привіт я тіки почав вивчати JS, мені подобається твоя подача інфи щодо програмуванняі взагалі сферу ІТ, бажаю успіху твоєму каналу!
    var array = ['a', 'i,', 'u', 'e', 'o'];
    array;
    Що Ви скажете про такий варіант вирішення задачі? занадто просто і по дурацьки?

    • @frontendscience
      @frontendscience  3 роки тому

      Ілля, дякую за підтримку!
      Дивись, ти перерахував в array всi голоснi, а тепер треба ще саме рiшення дописати.
      Бажаю успiхiв у фронтендi!!

  • @volodyaxhurshudyan287
    @volodyaxhurshudyan287 4 роки тому +1

    const findVowels = str => (str.match(/[aeiou]/gi) || []).length

    • @frontendscience
      @frontendscience  4 роки тому +1

      Классный вариант получился. Очень лаконичный

    • @volodyaxhurshudyan287
      @volodyaxhurshudyan287 4 роки тому

      @@frontendscience Спасибо

  • @grenkilove1944
    @grenkilove1944 3 роки тому

    Хех то чувство, когда написал громоздкий код, а потом смотришь решение где написано пару строчек
    const vowels = ['a', 'e', 'i', 'o', 'u'];
    findVowels('Hello');
    function findVowels(w){
    let arr = w.toLowerCase().split('');
    let count = 0;
    arr.reduce((index, letter)=>{
    vowels.forEach(function(vowel) {
    if(vowel === letter){
    count +=1;
    }});
    }, true);
    console.log(count)
    }

    • @frontendscience
      @frontendscience  3 роки тому +1

      Благодарю за решение ) Вышло не так уж и громоздко

  • @prog_learn
    @prog_learn Рік тому

    function getCount(str) {
    let sum = 0;
    let arr = str.split('');
    for(let elem of arr) {
    if(elem === 'a' || elem === 'e' || elem === 'i' || elem === 'o' || elem === 'u') {
    sum = sum + 1;
    }
    }
    return sum;
    }

  • @MrWrun
    @MrWrun 3 роки тому

    function vowels(s) { return s.replace(/[^aeiou]/gi, '').length }

  • @vladlitvinov6407
    @vladlitvinov6407 3 роки тому

    вот такое у меня решение
    const findVowels = str =>{
    let count = 0;
    const obj = {
    'a':0,
    'e':0,
    'i':0,
    'o':0,
    'u':0,
    }
    for (const el of str) { Object.keys(obj).includes(el) ? obj[el] +=1 : null }
    for (const key in obj) { obj[key] ? count+= obj[key] : null; }
    return count
    }
    console.log(findVowels('abbueee'))

  • @vr4836
    @vr4836 3 роки тому

    Кто от WebDev здесь ?? )

  • @pro-makak
    @pro-makak 3 роки тому

    достаточно низкоуровневое решение задачи, для наглядного понимания с редьюсом)
    const findWovels = (str) => {
    const strTo = str.toLowerCase().split('')
    return strTo.reduce((acc, nextValue) => {
    arrVowels.forEach(vow => {
    if (nextValue === vow) {
    acc++
    }
    })
    return acc
    }, 0)
    }

    • @frontendscience
      @frontendscience  3 роки тому +1

      Класс- такого решения еще не было! Благодарю!

  • @SheenisSheen
    @SheenisSheen 2 роки тому

    const fv = w => w.match(/[aeiou]/ig)?.length || 0